Docker 47 个常见故障的原因和解决方法

本文针对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

图片

原因: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,内存,硬盘空间,甚至是网络等,避免侵占宿主机的硬件资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/633503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单理解自动驾驶-看这篇够了!

本文主要介绍自动驾驶技术的整体框架&#xff0c;旨在从宏观理解自动驾驶技术。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;自动驾驶技术 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a…

第6章 现代通信技术

文章目录 6.1 图像与多媒体通信6.1.1 图像通信6.1.2 多媒体通信技术1、多媒体通信概念2、多媒体通信的组成3、多媒体通信的业务分类4、实用化的多媒体通信系统类型5、多媒体通信应用系统&#xff08;1&#xff09;多媒体会议电视系统&#xff08;2&#xff09;IPTV 6.2 移动通信…

【机器学习300问】12、为什么要进行特征归一化?

当线性回归模型的特征量变多之后&#xff0c;会出现不同的特征量&#xff0c;然而对于那些同是数值型的特征量为什么要做归一化处理呢&#xff1f; 一、为了消除数据特征之间的量纲影响 使得不同指标之间具有可比性。例如&#xff0c;分析一个人的身高和体重对健康的影响&…

每日一题——LeetCode1252.奇数值单元格的数目

进阶&#xff1a;你可以设计一个时间复杂度为 O(n m indices.length) 且仅用 O(n m) 额外空间的算法来解决此问题吗&#xff1f; 方法一 直接模拟&#xff1a; 创建一个n x m的矩阵&#xff0c;初始化所有元素为0&#xff0c;对于indices中的每一对[ri,ci]&#xff0c;将矩…

多色女童家居服,柔软细腻超舒适

柔软细腻到不想脱下来的 优可丝面料家居服来啦 精挑细选的可爱印花图案 让宝贝能够更快乐的进入梦乡 长度也是刚刚好合适 春夏交替的季节&#xff0c;建议多入几件换着穿

【新书推荐】Web3.0应用开发实战(从Web 2.0到Web 3.0)

第一部分 Flask简介 第1章 安装 1.1 创建应用目录 1.2 虚拟环境 1.2.1 创建虚拟环境 1.2.2 使用虚拟环境 1.3 使用pip安装Python包 1.4 使用pipregs输出包 1.5 使用requirements.txt 1.6 使用pipenv管理包 第2章 应用的基本结构 2.1 网页显示过程 2.2 初始化 2.3 路由和视图函数…

【C语言基础考研向】06运算符与表达式

文章目录 1.运算符分类 2.算术运算符及表达式 3.关系运算符与关系表达式 4.c语言运算级优先级表 课后习题自测 1.运算符分类 语言提供了13种类型的运算符,如下所示. (1)算术运算符( - * / %) . (2)关系运算符(>< >< l) . (3)逻辑运算符(l && ll) . (4)位…

一文了解【完全合作关系】下的【多智能体强化学习】

处于完全合作关系的多智能体的利益一致&#xff0c;获得的奖励相同&#xff0c;有共同的目标。比如多个工业机器人协同装配汽车&#xff0c;他们的目标是相同的&#xff0c;都希望把汽车装好。 在多智能体系统中&#xff0c;一个智能体未必能观测到全局状态 S。设第 i 号智能体…

c语言:用一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。

题目 用一个宏&#xff0c;可以将一个整数的二进制位的奇数位和偶数位交换。 如&#xff1a;01&#xff0c;是1&#xff0c;交换完是10&#xff0c;是2. 思路 1.分别取出奇数位上的数字和偶数位上的数字 举个例子&#xff1a;1001 0110 1001 0110 奇…

javaScript设计模式-工厂

它的好处是消除对象间的耦合度&#xff0c;在派生子类时提供了更大的灵活性。但盲目的把普通的构造函数扔在一边&#xff0c;并不值得提倡。如果要采一不可能另外换用一个类&#xff0c;或都不需要在运行期间在一系列可互换的类中进行选择&#xff0c;就不应该使用。这样在后期…

基于android的违章处理APP 前后端服务 -毕业设计

基于android的违章处理APP 该项目是基于android版本的违章处理APP&#xff0c;系统包含前端android服务和后端web服务&#xff0c;内容和技术都是目前比较流行的架构。 技术介绍 前端android端&#xff1a; jdk17 gradle8.0 android studio 采用2023版本 后端web端&#xff…

手动添加测试用例配置输入参数和期望值

1.选中函数&#xff0c;点击右键选择插入测试用例。这里所选择的插入测试用例区别于之前的测试用例的地方在于&#xff0c;这里插入测试用例是手动配置的&#xff0c;之前的是自动生成的。手动配置可以自定义选择输入参数和期望值。 2.添加测试用例后&#xff0c;点击测试用例&…

FTP文件传输与vsftpd配置

一 存储类型 直连式存储DAS 适用于那些数据量不大&#xff0c;对磁盘访问速度要求较高的中小企业 存储区域网络SAN 用来存储非结构化数据&#xff0c;虽然受限于以太网的速度&#xff0c;但是部署灵活&#xff0c;成本低 网络附加存储NAS 适用于大型应用或数据库系统&…

进程间通信之利用命名管道进行通信

文章目录 什么是命名管道命名管道的作用有什么命名管道的特点和用法是什么命名管道与匿名管道有什么区别匿名管道相较于命名管道的局限性 命名管道如何使用代码 什么是命名管道 命名管道&#xff08;Named Pipe&#xff09;&#xff0c;也被称为FIFO&#xff08;First In, Fir…

宝藏排序1

题目 冒泡排序 import java.util.Arrays; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();sc.nextLine();int[] res new int[n];for(int i0;i<n;i)res[i] sc.nextInt()…

C语言——整数和浮点数在内存中的存储

目录 一、整数在内存中的存储 二、大小端字节序和字节序判断 2.1 什么是大小端&#xff1f; 2.2 为什么有大小端? 2.3 练习 2.3.1 练习1 2.3.2 练习2 三、浮点数在内存中的存储 3.1练习 3.2 浮点数的存储 3.2.1浮点数存的过程 3.2.2浮点数取的过程 3.3 题目解…

provide和inject快速上手

应用案例 代码 点击弹窗1按钮&#xff0c;弹窗2出现 父组件 provide注入数据 // 弹窗1<Event ></Event> // 弹窗2<EventEvaluation v-if"isShowEventEvaluation"></EventEvaluation>const isShowEventEvaluation falseconst isShowEvent…

数学建模-预测人口数据

目录 中国09~18年人口数据 创建时间 绘制时间序列图 使用专家建模器 得到结果 预测结果 残差的白噪声检验 中国09~18年人口数据 创建时间 路径&#xff1a;数据-> 定义日期和时间 绘制时间序列图 使用专家建模器 看看spss最终判断是那个模型最佳的契合 得到结果 预…

【2024最新-python3小白零基础入门】No4.python控制语句学习

文章目录 1 选择结构1.1 if语句 2 循环结构2.1 while循环语句2.2 for循环语句2.3 break、continue、pass在循环中的用途 对于 Python 程序中的执行语句,默认是按照书写顺序依次执行的,这时称这样的语句是顺序结构的。但是,仅有顺序结构还是不够的,因为有时需要根据特定的情况,有…

vite多页面打包学习(一)

一、前期准备 首先初始化两套独立的vue实例和相关生态&#xff08;多页面嘛&#xff09;&#xff0c;如下 我在src文件下创建了pages大文件夹&#xff0c;并初始化了两套页面分别为index和page1&#xff0c;每套页面都有自己单独的组件、路由、状态、入口等等&#xff0c;这里…