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