热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Docker常见故障处理

Docker是一种相对使用较简单的容器,我们可以通过以下几种方式获取信息:1、通过dockerrun执行命令,或许返回信息2、通过dockerlogs去获取日志,做有针对性的筛选3

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服务

或者重启服务器

四、资源问题报错

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


图片

Docker logs 容器名,查看异常日志


查看/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.repohttp://mirrors.aliyun.com/repo/Centos-7.repoyum install epel-releaseyum makecacheyum 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

图片


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

解决方式:grep docker /proc/*/mountinfo | grep xxxxxkill进程后再重新删除容器

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 = 1net.bridge.bridge-nf-call-iptables = 1net.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. 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,内存,硬盘空间,甚至是网络等,避免侵占宿主机的硬件资源




推荐阅读
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 第五章详细探讨了 Red Hat Enterprise Linux 6 中的 Ext3 文件系统。5.1 节介绍了如何创建 Ext3 文件系统,包括必要的命令和步骤,以及在实际操作中可能遇到的问题和解决方案。此外,还涵盖了 Ext3 文件系统的性能优化和维护技巧,为用户提供全面的操作指南。 ... [详细]
  • 本文介绍了如何使用 Google Colab 的免费 GPU 资源进行深度学习应用开发。Google Colab 是一个无需配置即可使用的云端 Jupyter 笔记本环境,支持多种深度学习框架,并且提供免费的 GPU 计算资源。 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 本文探讨了Android系统中支持的图像格式及其在不同版本中的兼容性问题,重点涵盖了存储、HTTP传输、相机功能以及SparseArray的应用。文章详细分析了从Android 10 (API 29) 到Android 11 的存储规范变化,并讨论了这些变化对图像处理的影响。此外,还介绍了如何通过系统升级和代码优化来解决版本兼容性问题,以确保应用程序在不同Android版本中稳定运行。 ... [详细]
  • 利用Python与Android进行高效移动应用开发
    通过结合Python和Android,可以实现高效的移动应用开发。首先,需要安装Scripting Layer for Android (SL4A),这是一个开源项目,旨在为Android系统提供脚本语言支持。SL4A不仅简化了开发流程,还允许开发者使用Python等高级语言编写脚本,从而提高开发效率和代码可维护性。此外,SL4A还支持多种其他脚本语言,进一步扩展了其应用范围。通过这种方式,开发者可以快速构建功能丰富的移动应用,同时保持较高的灵活性和可扩展性。 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
author-avatar
fanersai_668
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有