Docker 47 个常见故障的原因和解决方法
liuian 2025-05-05 17:02 72 浏览
【作者】曹如熙,具有超过十年的互联网运维及五年以上团队管理经验,多年容器云的运维,尤其在Docker和kubernetes领域非常精通。
Docker是一种相对使用较简单的容器,我们可以通过以下几种方式获取信息:
1、通过docker run执行命令,或许返回信息
2、通过docker logs 去获取日志,做有针对性的筛选
3、通过systemctl status docker查看docker服务状态
4、通过journalctl -u docker.service 查看日志
以下是整理的docker容器类问题故障,分为9个类
一、启动类故障
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
原因:docker.sock不能创建
解决方式:
rm -rf /var/run/docker.sock
然后重新启动docker
3、
Job for docker.service failed. Failed to start Docker Application
原因:Selinux引起
解决方式:
/etc/sysconfig/selinux , 把 selinux 值改为disabled
重启docker解决
4、
docker: Error response from daemon:
/var/lib/docker/overlay/XXXXXXXXXXXXXXXXXXXXXXX: no such file or directory.
原因:docker没有指定目录或文件
解决方式:
systemctl stop docker
rm -rf /var/lib/docker/*
systemctl start docker
重启run镜像启动容器
5、
docker: Error response from daemon: Conflict. The container name "XXX" is already in use by container "XXX". You have to remove (or rename) that container to be able to reuse that name.
原因:docker name重名
解决方式:
改名容器或者删除重建容器
6、
Error: Connection activation failed: No suitable device found for this connection
原因:网卡配置问题
解决方式:
重启网卡
7、
系统重启后docker无法启动
报错为:docker0: iptables: No chain/target/match by that name
原因:docker服务iptables问题
解决方式:
重启docker服务system restart docker
8、
Error starting daemon: error initializing graphdriver: driver not supported
使用overlay2存储驱动启动docker daemon报错
原因:daemon缺少配置
解决方式:
添加配置:
/etc/docker/daemon.json
{"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"]}
9、
Failed to start docker.service: Unit docker.service is masked.
未知原因:docker 被mask
解决方式:
systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service
10、
Failed to start docker.service: Unit is not loaded properly: Invalid argument.
未知原因:docker服务无法正常load
解决方式:
卸载docker, 删除docker.service
重新安装docker
11、
docker-compose启动容器时报错:
/usr/lib/python2.7/site-packages/requests/init.py:80: RequestsDependencyWarning: urllib3 (1.22) or chardet (2.2.1) doesn't match a supported version! RequestsDependencyWarning)
未知原因:pip相应组件版本不支持
解决方式:
pip uninstall urllib3
pip uninstall chardet
pip install requests
12、
docker容器重启故障
强杀docker进程后,重启docker。docker中的容器无法启动并报错
docker restart XXXXXXX Error response from daemon: Cannot restart container XXXXXXX: container "XXXXXXXXXXXXXXXX": already exists
原因:旧容器未安全退出
解决方式:
docker-containerd-ctr --address /run/docker/containerd/docker-containerd.sock --namespace c rm <容器hash_id>
docker start 容器
13、
docker重启错误-重启命令一直卡住
systemctl restart docker 卡住
未知原因:可能是启动的容器数量过多,或者磁盘IO问题
解决方式:
systemctl start docker-cleanup.service
systemctl start docker
二、权限问题报错
14、
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
解决方式:
查看 /var/run/docker.sock所在用户组
将用户重新加入docker组中,usermod -aG docker ${USER}
15、
chown socket at step GROUP: No such process
原因:docker无法找到Group组信息,docker组有可能被误删除,
解决方式:
groupadd docker
16、
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
17、
docker commit镜像时报错
Error processing tar file(exit status 1): unexpected EOF
原因:可能是权限问题引起
解决方式:
chmod +x 加一个执行权限
三、镜像和仓库问题报错
18、
Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io
原因:Docker仓库无法访问
解决方式:
修改Docker仓库源为国内或者自建的仓库源
修改/etc/docker/daemon.json
19、
推送本地镜像报错
The push refers to a repository [XXXX] Get https://xxx/v1/_ping: http: server gave HTTP response to HTTPS client
原因:docker registry未采用https服务所致
解决方式:
/etc/docker/daemon.json 文件写入:
{ "insecure-registries":[""] }
20、
/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go: starting container process caused "exec: \"/bin/bash\": executable file not found in $PATH".
原因:Docker镜像自身问题或者Docker引擎版本比较低导致
解决方式:
可以升级Docker版本服务
21、
构建镜像,执行chown -R非常慢
原因:Docker使用写时复制策略,所以chown命令执行时,会将上层镜像文件全部复制到当前层,然后再修改权限,再写入文件系统。
解决方式:
不应该使用chown -R 这类大批量修改文件的命令
22、
docker build构建镜像的时候报错:
Message from syslogd kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
原因:docker engine版本过高
解决方式:
docker engine版本需要和docker内部镜像的内核版本匹配
23、
docker: Error response from daemon: containerd: container did not start before the specified time-out.ERRO[0133] error getting events from daemon: context canceled
原因:修改完docker root dir,重启后,下载镜像报错
解决方式:
重启docker服务
或者重启服务器
四、资源问题报错
24、
Docker no space left on device
原因:空间不足
解决方式:清理空间,删除未被使用的容器,镜像等资源
docker system prune -a
25、
/var/lib/docker/containers 占用过大
原因:日志文件占用过大
解决方式:
cat /dev/null > *-json.log
或者
增加dockerd启动参数,/etc/docker/daemon.json
{"log-driver":"json-file",
"log-opts": {"max-size":"2G", "max-file":"10"}
26、
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
原因:系统参数默认配置过小
解决方式:
修改/etc/sysctl.conf里面的vm.max_map_count 调大
27、
Got starting container process caused "process_linux.go:301:
running exec setns process for init caused \"exit status 40\"": unknown.
from time to time
原因:可能是cache问题引起
解决方式:
echo 1 > /proc/sys/vm/drop_caches
28、
docker本机启动多台容器导致出现后续容器启动失败
原因:查看硬盘空间是否满,如果不是硬盘空间问题引起
解决方式:
vim /etc/sysctl.conf
添加参数 fs.aio-max-nr = 1048576
sysctl -p
29、
Docker启动异常,状态反复restarting
Docker logs 容器名,查看异常日志
查看/var/log/messages
原因:内存跑满,引起OOM
解决方式:
释放内存后,再启动容器
五、版本不兼容报错
30、
overlayfs: Can't delete file moved from base layer to newly created dir even on ext4
原因:Centos 提供的文件系统 XFS 和 Overlay 兼容问题导致,
解决方式:
这个问题的修复在内核 4.4.6以上
31、
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 版本
六、网络或端口问题报错
32、
WARNING: IPv4 forwarding is disabled. Networking will not work.
原因:ipv4网络无法转发
解决方式:
/usr/lib/sysctl.d/00-system.conf
在最后一行添加net.ipv4.ip_forward=1
重启network服务。删除错误的容器,再次创建新容器
33、
Creating network "xxxxxxx" with the default driver
原因:docker网关冲突
启动容器、docker-compose启动容器后,断网问题
解决方式:
配置 docker-compose.yml内给启动的容器配置参数network_mode: "bridge"
34、
Unable to find a node that satisfies the following conditions [port xxxx]
原因:当容器使用端口映射(docker run -p xxxx:xxxx或 compose模板中的
ports)之后 系统会在宿主机上创建一个port,通过NAT来访问容器的指定port。如果宿主机上的端口被容器或者系统进程占用,就会导致端口分配失败。
解决方式:
清除占用端口的容器或者进程,或调整容器端口映射的宿主机端口避免冲突
35、
Error response from daemon: service endpoint with name xxx already
原因:端口已经被占用
解决方式:
重启docker容器
36、
docker: Error response from daemon: driver failed programming external connectivity on endpoint XXXXX: Bind for 0.0.0.0:80 failed: port is already allocated
原因:容器端口冲突
解决方式:
更换宿主机绑定端口
七、Docker安装报错
37、
安装docker报Requires: container-selinux >= 2.9
原因:container-selinux版本低或者是没安装的原因
解决方式:
wget -O /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release
yum makecache
yum install container-selinux
38、
安装docker-compose时报错
“ImportError: 'module' object has no attribute 'check_specifier'”
原因:setuptools版本问题
解决方式:
升级setuptools到30.1.0版本以上版本
pip install --upgrade setuptools
39、
安装docker-compose时报错
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
原因:python2.7提示升级
解决方式:
pip install -i https://pypi.douban.com/simple docker-compose
八、Docker删除报错
40、
docker删除容器报错
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进程后
再重新删除容器
41、
状态dead的容器删除报错
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 过几分钟后会自动删除
42、
docker删除镜像报错
Error response from daemon: conflict: unable to remove repository reference "XXXX" (must force) - container XXXX is using its referenced image YYYY
原因:镜像正在被某容器使用
解决方式:
需要删除相关ID容器后,才能删除镜像
43、
docker删除镜像报错
Error response from daemon: conflict: unable to delete XXXXXXXXXX (must be forced) - image is referenced in multiple repositories
原因:镜像login push 了远端其他仓库
解决方式:
如果不需要此镜像, docker rmi -f 强删
44、
docker删除镜像报错
Error response from daemon: conflict: unable to delete XXX (cannot be forced) - image has dependent child images
原因:存在依赖于父镜像的子镜像
解决方式:
强制删除镜像或者批量删除容器,再删除镜像
九、其他报错
45、
docker: Error response from daemon: driver failed programming external connectivity on end-point XXXXXXX: (iptables failed: iptables --wait -t filter -A DOCKER ! -i docker0 -o docker0 -p tcp -d 172.17.0.2 --dport 8080 -j ACCEPT: iptables: No chain/target/match by that name.
原因:防火墙问题引起
解决方式:
关闭防火墙,重启docker
46、
执行docker info出现如下警告
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
原因:配置问题引起,需要启用bridge-nf-call-iptables
解决方式:
vi /etc/sysctl.conf
添加以下内容
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
47、
docker数据库相关报错
使用Docker创建mysql容器闪退
Database is uninitialized and password option is not specified
解决方式:
docker run -d -e MYSQL_ROOT_PASSWORD=[密码] -p 3306:3306 mysql镜像
为避免出现各种奇怪且偶发的问题,运维和开发人员应该有规范的去使用docker容器,最大程度的去避免因为使用不当而引起的故障,参考以下:
Docker使用规范建议
1.尽量使用最近1-2年的新的稳定的docker版本
不要去安装今年前很老的版本,大量的bug已经被新版本更新解决掉了
2.尽量不要去创建非常大的镜像,比如5G10G以上的
镜像要尽量轻量化,去除不必要的软件,数据等
3.容器内挂载宿主机配置,使用只读
容器需要-v 宿主机的配置文件,尽量使用ro只读
4.数据要挂载宿主机物理硬盘或存储节点上
不要直接在容器里run,避免容器宕机引起数据丢失
5.应用日志一定要挂到宿主机上
不要直接打印到容器内,避免只能docker logs方式查看,避免去vulume目录里查看日志
6.不要只使用latest标签
Tag要有个管理标准,可以根据tag查找对应版本
7.不要使用容器ip,配置里更不能写死(默认172.17.0.x)
容器重启后,ip很可能会变
8.尽量不要在单容器内跑多进程
容器不是虚拟机,尽量做到1个容器,1个进程
9.跨环境镜像保持一致
不论是测试,UAT,生产环境,尽量保持同一个镜像,不要变更,环境变更只需要变更环境变量参数做区分
10.一定监控docker容器,即使发现问题
建议使用prometheus监控容器
11.一定要限制docker容器的资源
尤其是CPU,内存,硬盘空间,甚至是网络等,避免侵占宿主机的硬件资源
相关推荐
- 无法连接到这个网络是怎么回事
-
有可能是网络本身有问题,需要联系运营商解决。也有可能是因为网卡驱动问题,首先鼠标右击开始按钮,然后点击设备管理器,双击网络适配器,最后查看网卡驱动有没有出现黄色的感叹号,如果有的话,右击选择更新驱动程...
- 刷机精灵怎么解除锁屏密码(刷机精灵怎么解除锁屏密码设置)
-
刷机精灵解锁手机锁屏密码方法:下载好刷机精灵。打开链接手机,之后在刷机精灵页面里能看到“实用工具”的选项。解除手机解锁图案要获取root权限,若没有获取的可以在这里点击获取root权限的选项。获取了...
- 联想云服务官网(联想云服务官网查找手机)
-
华为手机也是可以下载云服务软件安装然后使用联想账号登陆云服务的。部分云服务功能将无法使用。登录联想云服务方法:点开云服务软件,选择立即使用,即出现:手机号码登入,邮箱登入,第三方登入;手机号码登入,邮...
- 宏基笔记本系统重装快捷键(宏基笔记本重装系统步骤)
-
如果用系统u盘、光盘安装:1、需要在Bios中设置从u盘或光盘启动。2、启动电脑,dcer一般默认按Del键(有些型号F2、F12)进入Bios设置界面。F2键。宏碁笔记本重装系统按F2键,进入BIO...
- windows10官网打不开(win10系统官网打不开)
-
你可以通过以下步骤在Windows10官网上更新操作系统:1.打开windows官网,进入“下载和工具”页面。2.单击“立即下载工具”按钮,将下载“Windows10更新助手”。3.运行“...
- win7无线网卡插上没反应(win7无线网卡插上没反应怎么回事)
-
1、如果是路由器的问题,如果原来可以用,暂时不能用了,在有就是恢复出厂设置,从新设置就可以用了(这是在物理连接正确的前提下)。2、如果是宽带本身的问题,首先直接联接宽带网线测试,如果是宽带的问题,联系...
- 下载爱奇艺安装(下载爱奇艺安装包)
-
如果你的电脑无法安装爱奇艺,可能有以下原因,第一种原因可能是你的电脑系统版本太低,升级你的电脑操作系统,可以促进爱奇艺的下载,第二种情况是你下载的爱奇艺可能捆绑一些病毒软件,系统的杀毒软件识别有霸王软...
- 5000元左右的电脑配置单(5000左右的电脑配置推荐2021)
-
五千元至六千元价位电脑主机,如果组装机,可以配置配置很高的档次,电脑主机主板可以配置不低于十二代产品,可以设四个内存条插槽,相应的内存可以配置128GB内存条2至四根,电脑处理器也同样不低于十二代产品...
-
- 快速关机(快速关机按什么键)
-
1、我们直接长按手机右侧的电源键,大概5秒的时间,这时候手机页面会直接显示是否关机,选择关机就可以直接关机了。2、找到手机一侧的音量“+”键,再找到电源按键,之后只需同时按住音量“+”键和电源按钮,直到手机屏幕关闭即可强制关机。3、点击【设...
-
2025-12-25 08:05 liuian
- 云电脑免登录破解版(“云电脑破解版”)
-
虎牙YOWA云游戏平台便是一款完全免费的产品,只要玩家在自己的账号上购买过相关的产品即可通过云游戏平台直接登陆。但云游戏平台终归只是改变玩家的游戏方式,用户最终还是要回归于游戏中,如果难以保证游戏体验...
- 联想家庭版win7(联想家庭版笔记本电脑)
-
1、开机到欢迎界面时,按Ctrl+Alt+Delete,跳出帐号窗口,输入用户名:administrator,回车。2、如果这个帐号也有密码采用开机启动时按F8选“带命令行的安全模式”。3、选“Ad...
- 两台电脑怎么传文件最快(两台电脑怎么传文件比较快)
-
两台电脑之间传递文件可以有很多种方法。如果两台电脑同时在1栋楼或者一间办公室内,可以用U盘拷贝的方法传递文件。另外最快的方法还可以用通过邮箱、微信、QQ传送文件,那样速度更快,节省时间,又节省距离。将...
- win7计算机图标怎么弄出来(win7怎么设置计算机图标)
-
您好,如果您的Win7桌面图标不见了,可以尝试以下方法:1.右键点击桌面的空白处,点击查看之后点击显示桌面图标。2.如果第一种方法不起作用,可以使用组合键“ctrl键+alt键+delete键”,...
- usb打印机改wifi打印机(usb打印机改无线网络打印机)
-
首先要把打印机通过USB端口连接到路由器上,连接成功后路由器上的USB指示灯会亮。然后在需要使用网络打印机的电脑上安装打印机的驱动程序,这样才能够正常使用打印服务器连接的打印机。登录路由器,在左侧的系...
- windows7没pdf打印机(win7系统自带的打印pdf找不到了)
-
建议安装Acrobat9,并安装9.1.3的AdobeReader/Acrobat的更新,去官网搜索即可,如果现有版本是9.1.0,则9.1.2和9.1.3的更新均需要安装.我实验的结果时9.0...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
