docker的安装

建议使用官网的安装方法:https://docs.docker.com/engine/install/centos/#installation-methods
如果使用centos自带的yum源安装,版本很低
安装方法:

  1. sudo yum install -y yum-utils
  2. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  3. [xx@xx docker]$ docker -v
  4. Docker version 19.03.13, build 4484c46d9d

push报错:unauthorized: No permission to write manifest

操作系统日志报错是这样的:9月 23 09:13:09 deployer dockerd[4531]: time=”2020-09-23T09:13:09.211267353+08:00” level=info msg=”Attempting next endpoint for push after error: unauthorized: No permission to write manifest”
9月 23 09:19:37 deployer dockerd[4531]: time=”2020-09-23T09:19:37.267653930+08:00” level=warning msg=”failed to upload schema2 manifest: unauthorized: No permission to write manifest - falling back to schema1”
9月 23 09:19:37 deployer dockerd[4531]: time=”2020-09-23T09:19:37.290440351+08:00” level=info msg=”Attempting next endpoint for push after error: unauthorized: No permission to write manifest”

客户度版本问题,升级

push报错:unauthorized: The client does not have permission to push to the repository.

客户度版本问题,升级

让普通用户有权限使用docker

1. 创建docker用户组

  1. sudo groupadd docker

2. 将用户添加到docker用户组

  1. sudo usermod -aG docker ${USER_NAME}

3. 重启docker服务

  1. sudo systemctl restart docker

docker执行报错:Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/json?all=1: dial unix /var/run/docker.sock: connect: permission denied

没有docker权限
1)给用户root权限
2)把用户加到docker组
# 添加docker用户组,一般已存在,不需要执行
sudo groupadd docker
# 将登陆用户加入到docker用户组中
sudo gpasswd -a $USER docker
# 需要使用docker命令的用户实时更新用户组
newgrp docker
# 测试docker命令是否可以使用
sudo正常使用
docker version

docker in docker 的挂载目录时显示为空目录 路径是nfs挂载

docker in docker 是指在docker容器中再次执行docker运行容器。通常会将/var/docker.sock也挂载到第一层docker,以保持和主机的docker一致的环境,不用重复下载镜像。
但有一种情况,主机的一个路径使用nfs挂载一个网络存储,挂载时如果没有使用根目录,那么把该只读路径挂载到第一层docker时,没问题。再想把这个只读路径继续挂载到第二层docker容器,就会发现虽然路径存在,但是只是一个空目录。
举个例子:
某nfs存储为 192.168.39.2:/sharedata ,查看mount路径:
# showmount -e 192.168.39.2 Export list for 192.168.39.2:
/sharedata *
该路径下有一个目录为abc,是你要读取的,有两种挂载方法:
mount 192.168.39.2:/sharedata/abc /data/abc
也可以
mount 192.168.39.2:/sharedata /data
然后你自己去读取/data/abc
但是前一种方法在docker in docker时会读取不到

docker容器的存储限制

1)通过dm.basesize设置。可以修改daemon.json,或者 dockerd的启动参数。该参数需要存储驱动支持,devicemapper,overlay2,都是支持的。
https://www.lijiaocn.com/%E9%A1%B9%E7%9B%AE/2017/07/17/docker-storage.html#device-mapper
2)docker服务启动日志可能会记录该参数无效,但用docker info查看是生效的,对应的属性是Base Device Size
3)修改后需要把原来的镜像删除重新下载。docker镜像下载时会按照当前的docker的参数设置GraphDriver.Data.DeviceSize,作为默认值。
4)这个值是容器的使用上限,可以超配。docker不做检查。如虚机磁盘空间100G,可以运行10个以上的容器。
5)dm.basesize只能越设越大,否则docker启动不了。比如设置了50G生效后,以后只能改>=50G,即使把镜像删掉,也还是报相同错误。
6)也可以指定docker run size=xxx 来动态指定

overlay2的docker存储修改,需要mount时指定pquota
1)kubectl delete node
2 ) stop kubelet
3) rm container
4) stop docker
5) umount . /dev/vg_vdb/lv_vdb /var/lib/docker xfs defaults,noatime,nobarrier 0 0
6) 修改fstab /dev/vg_vdb/lv_vdb /var/lib/docker xfs defaults,noatime,nobarrier,pquota 0 0
7)mount -a
8)start docker
9)测试 docker run —rm —storage-opt size=13G -d busybox sleep 1000 , ok
overlay 13G 8.0K 13G 1% /var/lib/docker/overlay2/fd1c562e8efa37b32e63f7c4c8fa7e0c356efc9174b0ca20b67a60be5d5bb024/merged
10)启动kubelet恢复 ,节点恢复使用 nodexx Ready 10s v1.16.7