Docker - 常见错误合集

2025年03月22日 09:03:38    [原创]


1. 启动类错误

1. docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

原因:Docker未正常启动

解决方式:

  
  systemctl start docker
  

2. can't create unix socket /var/run/docker.sock: is a directory

原因:/var/run/docker.sock 权限错误或者文件类型不对

解决方式:

  
  rm -rf /var/run/docker.sock
  systemctl start docker
  

3. failed to start daemon: error initializing graphdriver: Storage Option overlay2.size only supported for backingFS XFS

原因:docker根目录所在文件系统不是xfs

解决方式:

1:docker根目录是否单独配置了磁盘,如果是单独磁盘但未挂载则执行挂载即可

2:系统根目录所在文件系统非xfs,则docker根目录需要单独挂载磁盘并初始化为xfs文件系统


4. Error starting daemon: error initializing graphdriver: driver not supported

原因:当前内核不支持存储驱动,overlay2 驱动需要 Linux 内核 3.18+

解决方式:

  
  lsmod | grep overlay       //查看overlay模块是否加载
  modprobe overlay           //加载overlay模块

  如果还是不行,则升级内核版本>=3.18+
  overlay2     RHEL/CentOS 内核 ≥ 3.10.0-693, 其他>=4.0
  devicemapper 需要内核 >=2.6.9
  

5. Failed to start docker.service: Unit is not loaded properly: Invalid argument.

原因:Docker 的 systemd 服务单元文件(docker.service)配置错误或 systemd 配置不兼容导致

解决方式:

1:手动修复docker.service文件配置

2:卸载重装docker


6. docker restart XXXXXXX Error response from daemon: Cannot restart container XXXXXXX: container "XXXXXXXXXXXXXXXX": already exists

原因:旧容器未安全退出

解决方式:

  
# 停止 Docker 服务
sudo systemctl stop docker

# 删除容器关联的元数据目录(替换为实际容器ID)
sudo rm -rf /var/lib/docker/containers/container_id

# 重启 Docker
sudo systemctl start docker

# 重新启动容器
docker start 容器名称
  

7. "WARNING: Your kernel does not support cgroup swap limit. WARNING: Your kernel does not support swap limit capabilities. Limitation discarded."?

原因:因为系统默认没有开启对内存和 swap 使用的统计功能,引入该功能会带来性能的下降。要开启该功能

解决方式:

  
编辑 /etc/default/grub 文件(Ubuntu 系统为例),配置 GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
更新 grub:sudo update-grub 重启系统即可。
  

8. WARING:No swap limit support

原因:Linux版本不支持swap内存的限制

解决方式:

该方法已在Ubuntu 20.04 TLS 下测试

  
  1.编辑/etc/default/grub文件。
  vim /etc/default/grub

  2.找到GRUB_CMDLINE_LINUX=配置项,并追加“cgroup_enable=memory swapaccount=1”。

  3.保存文件并执行一下命令:

  sudo update-grub

  4.重启服务器
  reboot
  

2. 权限类错误

1. Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.soc

原因:当前用户无权访问 Docker 守护进程的 Unix 套接字文件 /var/run/docker.sock

解决方式:

  
  将用户重新加入docker组中,usermod -aG docker xxx  // xxx是当前用户名
  

2. chown socket at step GROUP: No such processc

原因:docker无法找到Group组信息,docker组有可能被误删除

解决方式:

  
  groupadd docker
  

3. Post http:///var/run/docker.sock/v1.XXX /auth: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?

原因:非Root用户管理Docker时,权限不足

解决方式:

  
  groupadd docker
  usermod -a -G docker user // xxx是当前用户名
  

3. Post http:///var/run/docker.sock/v1.XXX /auth: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
desc = "transport: dial unix:///var/run/docker/containerd/docker-containerd.sock: time

原因:非Root用户管理Docker时,权限不足

解决方式:

  
  groupadd docker
  usermod -a -G docker user // xxx是当前用户名
  

4. Error response from daemon: devmapper: Error mounting: invalid argument

原因:因为selinux enable的时候,创建了该容器。而后修改了/etc/selinux/config 修改成selinux为disabled。
物理机重启后selinux处于关闭状态,则原先在selinux enable时候创建的容器就会无法启动报出这种错误。

解决方式:

  
  1.可以将selinux重新置为enable然后重启物理机即可修复。

  2.修改容器的配置,比如我的容器的配置是/var/lib/docker/containers/xxx/config.v2.json文件。将其中的
  "MountLabel": "system_u:object_r:svirt_sandbox_file_t:s0:c12,c257", "ProcessLabel": "system_u:system_r:svirt_lxc_net_t:s0:c12,c257" 重修修改为
  "MountLabel": "", "ProcessLabel": "",

  然后重新启动docker daemon,容器即可修复。
  

3. 资源类错误

1. Docker no space left on device

原因:磁盘空间不足

解决方式:

  
  # 清理多余的容器和镜像
  docker system prune -a

  # 或者查找docker 根目录下指定文件名后缀且大于1G的文件
  find /skylar/  -type f -name "*.log" -size +1G -print0 | xargs -0r du -h | sort -h

  # 删除找到的文件并打印删除信息
  find /var/lib/docker -type f -size +1G -printf "Deleting: %p (Size: %s bytes)\n" -delete
  

2. max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

原因:系统参数vm.max_map_coun默认配置过小,vm.max_map_count是进程可以拥有的内存映射区域的数量

解决方式:修改/etc/sysctl.conf里面的vm.max_map_count 调大

  
  vim /etc/sysctl.conf
  vm.max_map_count=262144
  sysctl -p
  

3. process_linux.go:301: running exec setns process for init caused "exit status 40"

原因:内存不足

解决方式:

  
  echo 1 > /proc/sys/vm/drop_caches
  

4. Docker启动异常,状态反复restarting的原因

原因:内存跑满,引起OOM

解决方式:

  
  echo 1 > /proc/sys/vm/drop_caches
  

5. 执行docker info 显示:Usage of loopback devices is strongly discouraged for production use

原因::用loopback的方式运行docker是强烈不建议的

解决方式:在docker daemon启动时,加入device mapper的元数据存储和docker的镜像数据存储选择独立的块设备即可,lvm或者独立磁盘分区都可以

  
  1:添加独立的lvm
  2:配置lvm(/dev/xxx)为驱动设备
  --storage-opt dm.datadev=/dev/xxx  --storage-opt dm.metadatadev=/dev/xxx
  

6. Error response from daemon: devmapper: Thin Pool has 155398 free data blocks which is less than minimum required 163840 free data blocks.

原因:: Thin Pool 存储池的剩余空间不足,无法满足 Docker 的存储需求

解决方式:

  
  # 清理无用的容器和镜像
  system prune -a

  # 如果是基于lvm
  通过lvm扩展磁盘空间
  

7. Error running DeviceCreate (createSnapDevice) dm_task_run failed.

原因:: devicemapper 存储驱动的元数据可能因非正常关机、强制重启或磁盘故障导致损坏,进而触发设备创建失败

解决方式:重新构建资源池元数据即可

  
  #不同安装路径可能不同
  service docker stop
  thin_check /var/lib/docker/devicemapper/devicemapper/metadata
  thin_check --clear-needs-check-flag /var/lib/docker/devicemapper/devicemapper/metadata
  service docker start
  

4. 网络类错误

1. 使用 docker port 命令映射容器的端口时,系统报错“Error: No public port '80' published for xxx”

原因:创建镜像时 Dockerfile 要通过 EXPOSE 指定正确的开放端口

解决方式:

  
  容器启动时指定 PublishAllPort = true
  

2. Error response from daemon: driver failed programming external connectivity on endpoint loving_bassi

原因:在 iptables 中的docker0网卡中没有这样的链、目标、规则匹配,即是docker服务启动时定义的自定义链DOCKER由于某种原因被清掉

解决方式:重启docker服务及可重新生成自定义链DOCKER然后再启动容器

  
  pkill docker
  iptables -t nat -F
  ifconfig docker0 down
  brctl delbr docker0
  service docker restart
  

3. 执行docker info出现如下警告WARNING: bridge-nf-call-iptables is disabled

原因:Linux 内核的 bridge-netfilter 功能未启用

解决方式:

  
  # 配置 iptables 来查看桥接网络流量
  cat > /etc/sysctl.conf<<'EOF'
  net.bridge.bridge-nf-call-ip6tables = 1
  net.bridge.bridge-nf-call-iptables = 1
  EOF
  sysctl -p
  

4. 指定容器连接到当前连接以及networks关键字自定义网络,应用任然无法进行相互互联

原因:firewalld 的没有信任 docker 的 ip 地址

解决方式:将所有 docker 的 ip 添加都白名单即可。

  
  # 配置 iptables 来查看桥接网络流量
  firewall-cmd  --zone=trusted --add-source=172.17.0.1/16 --permanent
  firewall-cmd  --zone=trusted --add-source=172.20.0.1/16 --permanent
  firewall-cmd --reload
  

5. 镜像类错误

1. pull images x509 certificate has expired or is not yet valid

原因:一般都是本地系统时间错误导致报错证书过期,所以先查看本地系统时间

解决方式:将时间同步至当前时间即可解决

  
  timedatectl set-ntp true
  

2. Error response from daemon: driver failed programming external connectivity on endpoint loving_bassi

原因:在 iptables 中的docker0网卡中没有这样的链、目标、规则匹配,即是docker服务启动时定义的自定义链DOCKER由于某种原因被清掉

解决方式:重启docker服务及可重新生成自定义链DOCKER然后再启动容器

  
  pkill docker
  iptables -t nat -F
  ifconfig docker0 down
  brctl delbr docker0
  service docker restart
  

3. 执行docker info出现如下警告WARNING: bridge-nf-call-iptables is disabled

原因:Linux 内核的 bridge-netfilter 功能未启用

解决方式:

  
  # 配置 iptables 来查看桥接网络流量
  cat > /etc/sysctl.conf<<'EOF'
  net.bridge.bridge-nf-call-ip6tables = 1
  net.bridge.bridge-nf-call-iptables = 1
  EOF
  sysctl -p
  

6. 版本不兼容类错误

1. overlayfs: Can't delete file moved from base layer to newly created dir even on ext4

原因:Centos 提供的文件系统 ext4 和 Overlay 兼容问题导致,

解决方式:

  
  这个问题的修复在内核 4.4.6以上版本中已经解决,所以需要升级内核版本
  

2. docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "process_linux.go:297: getting the final child's pid from pipe caused "read init-p: connection reset by peer"": unknown.

原因:Docker版本和操作系统版本不匹配

解决方式:重新安装和操作系统内核支持的docker 版本


7. Docker删除类错误

1. Error response from daemon:Driver overlay failed to remove root filesystem xxxxx: remove/var/lib/docker/overlay2/xxxxx/merged: device or resource busy

原因:容器挂载数据卷,无法直接删除

解决方式:

  
  grep docker /proc/*/mountinfo | grep xxxxx
  kill进程后
  再重新删除容器
  

2. Error response from daemon: Driver aufs failed to remove root filesystem XXXXXXXXXXXXXXXX: aufs: unmount error after retries: /var/lib/docker/aufs/mnt/xxxxxxxx: device or resource busy

原因:dead状态容器无法删除,还在占用资源

解决方式:docker rm -fv 容器id 过几分钟后会自动删除


3. Error response from daemon: conflict: unable to remove repository reference "XXXX" (must force) - container XXXX is using its referenced image YYYY

原因:镜像正在被某容器使用

解决方式:需要删除相关ID容器后,才能删除镜像


4. Error response from daemon: conflict: unable to delete XXX (cannot be forced) - image has dependent child images

原因:存在依赖于父镜像的子镜像

解决方式:强制删除镜像或者批量删除容器,再删除镜像


8. Docker构建类错误

1. 构建容器镜像提示错误信息standard_init_linux.go:211: exec user process caused "no such file or directory"

原因:docker-compose.yaml 或者 DockerFile 格式不是 unix (/n) 而是 dos (/r/n) 导致的

解决方式:

  
  dos2unix docker-compose.yaml && dos2unix DockerFile