Docker 容器常见故障排查及处理,超好用,建议收藏

这篇具有很好参考价值的文章主要介绍了Docker 容器常见故障排查及处理,超好用,建议收藏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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
a dependency job for docker.service failed. see 'journalctl -xe' for details,docker,容器

原因: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.
a dependency job for docker.service failed. see 'journalctl -xe' for details,docker,容器

未知原因: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
a dependency job for docker.service failed. see 'journalctl -xe' for details,docker,容器

原因: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 /v2/: dial tcp: lookup
原因: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服务
或者重启服务器
四、资源问题报错
25、
Docker no space left on device
原因:空间不足
解决方式:清理空间,删除未被使用的容器,镜像等资源
docker system prune -a
26、
/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’}
27、
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
原因:系统参数默认配置过小
解决方式:
修改/etc/sysctl.conf里面的vm.max_map_count 调大
28、
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
29、
docker本机启动多台容器导致出现后续容器启动失败
原因:查看硬盘空间是否满,如果不是硬盘空间问题引起
解决方式:
vim /etc/sysctl.conf
添加参数 fs.aio-max-nr = 1048576
sysctl -p
30、Docker启动异常,状态反复restarting
a dependency job for docker.service failed. see 'journalctl -xe' for details,docker,容器

Docker logs 容器名,查看异常日志
a dependency job for docker.service failed. see 'journalctl -xe' for details,docker,容器

查看/var/log/messages

原因:内存跑满,引起OOM
解决方式:
释放内存后,再启动容器
五、版本不兼容报错
31、
overlayfs: Can’t delete file moved from base layer to newly created dir even on ext4
原因:Centos 提供的文件系统 XFS 和 Overlay 兼容问题导致,
解决方式:
这个问题的修复在内核 4.4.6以上
32、
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 版本
六、网络或端口问题报错
33、
WARNING: IPv4 forwarding is disabled. Networking will not work.
原因:ipv4网络无法转发
解决方式:
/usr/lib/sysctl.d/00-system.conf
在最后一行添加net.ipv4.ip_forward=1
重启network服务。删除错误的容器,再次创建新容器
34、
Creating network ‘xxxxxxx’ with the default driver
原因:docker网关冲突
启动容器、docker-compose启动容器后,断网问题
解决方式:
配置 docker-compose.yml内给启动的容器配置参数network_mode: ‘bridge’
35、
Unable to find a node that satisfies the following conditions [port xxxx]
原因:当容器使用端口映射(docker run -p xxxx:xxxx或 compose模板中的
ports)之后 系统会在宿主机上创建一个port,通过NAT来访问容器的指定port。如果宿主机上的端口被容器或者系统进程占用,就会导致端口分配失败。
解决方式:
清除占用端口的容器或者进程,或调整容器端口映射的宿主机端口避免冲突
36、
Error response from daemon: service endpoint with name xxx already
原因:端口已经被占用
解决方式:
重启docker容器
37、
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安装报错
38、安装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
39、安装docker-compose时报错
“ImportError: ‘module’ object has no attribute ‘check_specifier’”
原因:setuptools版本问题
解决方式:
升级setuptools到30.1.0版本以上版本
pip install --upgrade setuptools
40、安装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删除报错
41、docker删除容器报错
Error response from daemon:Driver overlay failed to remove root filesystem xxxxx: remove/var/lib/docker/overlay2/xxxxx/merged: device or resource busy

原因:容器挂载数据卷,无法直接删除
a dependency job for docker.service failed. see 'journalctl -xe' for details,docker,容器

解决方式:
grep docker /proc/*/mountinfo | grep xxxxx
kill进程后
再重新删除容器
42、状态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 过几分钟后会自动删除
43、docker删除镜像报错
Error response from daemon: conflict: unable to remove repository reference ‘XXXX’ (must force) - container XXXX is using its referenced image YYYY
原因:镜像正在被某容器使用
解决方式:
需要删除相关ID容器后,才能删除镜像
44、docker删除镜像报错
Error response from daemon: conflict: unable to delete XXXXXXXXXX (must be forced) - image is referenced in multiple repositories
原因:镜像login push 了远端其他仓库
解决方式:
如果不需要此镜像, docker rmi -f 强删
45、docker删除镜像报错
Error response from daemon: conflict: unable to delete XXX (cannot be forced) - image has dependent child images
原因:存在依赖于父镜像的子镜像
解决方式:
强制删除镜像或者批量删除容器,再删除镜像
九、其他报错
46、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
47、
执行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
48、
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-2年的新的稳定的docker版本
不要去安装今年前很老的版本,大量的bug已经被新版本更新解决掉了
尽量不要去创建非常大的镜像,比如5G10G以上的
镜像要尽量轻量化,去除不必要的软件,数据等
容器内挂载宿主机配置,使用只读
容器需要-v 宿主机的配置文件,尽量使用ro只读
数据要挂载宿主机物理硬盘或存储节点上
不要直接在容器里run,避免容器宕机引起数据丢失
应用日志一定要挂到宿主机上
不要直接打印到容器内,避免只能docker logs方式查看,避免去vulume目录里查看日志
不要只使用latest标签
Tag要有个管理标准,可以根据tag查找对应版本
不要使用容器ip,配置里更不能写死(默认172.17.0.x)
容器重启后,ip很可能会变
尽量不要在单容器内跑多进程
容器不是虚拟机,尽量做到1个容器,1个进程
跨环境镜像保持一致
不论是测试,UAT,生产环境,尽量保持同一个镜像,不要变更,环境变更只需要变更环境变量参数做区分
一定监控docker容器,即使发现问题
建议使用prometheus监控容器
一定要限制docker容器的资源
尤其是CPU,内存,硬盘空间,甚至是网络等,避免侵占宿主机的硬件资源

docker容器时间不一致
docker容器时间与系统时间不一致
解决办法:
1,如果系统时间准确
在宿主机执行如下命令,查看/etc/localtime软连接的源文件路径
ls -l /etc/localtime
#lrwxrwxrwx 1 root root 33 Sep 8 06:25 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai

可以看出/etc/localtime的源文件路径为/usr/share/zoneinfo/Asia/Shanghai
接下来,使docker容器中/etc/localtime软连接到宿主机/usr/share/zoneinfo/Asia/Shanghai
docker cp /usr/share/zoneinfo/Asia/Shanghai 容器名:/etc/localtime
2,如果系统时间不准确
docker cp /usr/share/zoneinfo/Asia/Shanghai 容器名:/etc/localtime
综上,docker容器与宿主机时间时区不一致的终极解决方法为:
docker cp /usr/share/zoneinfo/Asia/Shanghai 容器名:/etc/localtime

docker 启动容器异常Error response from daemon: OCI runtime create failed: container with id exists
docker 启动容器异常
问题描述
docker服务异常停止,重启docker后,容器启动失败
错误信息
Error response from daemon: OCI runtime create failed: container with id exists: xxx unknown
错误原因
docker启动的时候,会在运行目录(/var/run/docker/runtime-runc/moby)(不同环境,可能目录不一样,可以通过find / -name ‘容器ID’ 查找)下生成以docker-ID,因为docker异常停止,改容器文件并没有删除,所以启动的时候,会报错该容器已存在
解决办法
find / name “报错的容器ID”
cd /var/run/docker/runtime-runc/moby
rm -rf “刚才查找到报错的容器ID”
docker start “有问题的容器” ## 重新启动容器文章来源地址https://www.toymoban.com/news/detail-761519.html

到了这里,关于Docker 容器常见故障排查及处理,超好用,建议收藏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 10款好用的AI生成PPT软件盘点,干货建议收藏!

    作为一名学生或职场人,你是否在PPT幻灯片上花费了大量的时间? 一个好消息是,随着AI技术与各种办公软件的结合,是时候摆脱PPT的束缚,拥抱更愉快的幻灯片制作体验了! 在这篇文章中,我们盘点了 2023年10款好用的AI生成PPT软件 ,可帮助你在几秒钟内生成一份美观的P

    2024年02月03日
    浏览(132)
  • 启动docker容器时报iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport(Docker容器九类常见故障)

    错误原因:  在防火墙中默认 nat 是 REJECT的,所以端口映射被拒绝。 解决方法: 网上其他的解决方法:基本都是重置docker0网络,重启docker 网上有的说是只重启docker即可,即只执行systemctl restart docker,我自己也是这样解决掉问题的。 如果还是不行的话,就按照上面的方式试

    2024年02月08日
    浏览(31)
  • 推荐几个亲测好用高质量学习SQL的网站(建议收藏)

    打开我的收藏夹,找出我曾经苦苦寻觅但却尘封已久的小网站—— 想什么呢,是正经学习SQL的网站,看完赶紧收藏学习起来! LintCode是我常用来刷算法题的网站,最近他们开发了一个 SQL教程 模块特好用,很适合零基础从0-1学习SQL。 这不只是单纯的刷题工具,而是先跟你梳理

    2024年02月13日
    浏览(44)
  • 实例解析 校园综合布线常见故障排查及解决方法

    校园网为高校数字化校园创造了一个良好的支撑环境,在行政管理、科学研究、人才培养、学科建设和师生员工的课余生活等方面产生了深远的影响.随着校园网的不断建设以及高校扩招,网络用户日益增长,网络故障所带来的问题也越来越突出.因此,确保校园网络的稳定运

    2024年02月07日
    浏览(26)
  • Java 超高频常见字符操作【建议收藏】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章

    2024年02月08日
    浏览(33)
  • Python 超高频常见字符操作【建议收藏】

    为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。 (博客的参考源码可以在我主页的资源里找到,如果在学习的

    2024年02月08日
    浏览(68)
  • SpringBoot系列(四十二):配置Undertow容器|超级详细,建议收藏

    环境说明:Windows10+idea2021.3.2+jdk1.8+springboot2.3.1.RELEASE         Undertow是一个高性能、灵活、轻量级的Web容器,它是Spring Boot默认的Web容器。与Tomcat相比,Undertow具有更快的启动速度、更低的内存占用,以及更好的性能和可扩展性。本篇文章将介绍如何配置Undertow容器,让你的

    2023年04月20日
    浏览(77)
  • 网件路由器的无线网常见故障排查方法

        一、随着无线网被越来越多地应用于各种消费性电子产品当中,如笔记本电脑、小型上网本、智能手机、打印机等,用户在不同地方接入至网络的性能会因为设备不同而有所不同,网络的复杂程度日趋显著,相应的故障排除难度也在增加,客户端可自由快速地在若干个

    2024年02月05日
    浏览(57)
  • 云原生之深入解析Kubernetes中如何使用临时容器进行故障排查

    容器及其周围的生态系统改变了工程师部署、维护和排查工作负载故障的方式。但是,在 Kubernetes 集群上调试应用程序有时可能会很困难,因为可能在容器中找不到所需的调试工具。许多工程师使用基于精简、发行版构建无发行版的基础镜像,其中甚至没有包管理器或shell,

    2024年02月05日
    浏览(42)
  • 科研中论文常见数学符号及其含义(科研必备,建议收藏)

    返回论文和资料目录 数学符号在数学领域是非常重要的。在论文中,使用数学符号可以使得论文更加简洁明了,同时也能够准确地描述各种概念和理论。在本篇博客中,我将介绍一些常见的数学符号及其含义(省去特别简单的符号),希望能够帮助读者更好地理解数学论文。

    2023年04月25日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包