您现在的位置是:首页 > 诗句大全

启动docker容器时报iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport(Docker容器九类常见故障)

作者:淼淼时间:2024-04-10 09:45:54分类:诗句大全

简介  文章浏览阅读5.9k次。这两篇文章写的还是比较透彻的,主要就是防火墙映射转发之类的,需要了解下防火墙相关的只是,因此暂时不做深入了解,等有时间了再好好研究防火墙。##注释掉下面这一行,这行的意思是拒绝掉所有的FORWARD,拒绝的提示信息是icmp-host-

点击全文阅读

Docker容器九类常见故障

错误原因: 
在防火墙中默认 nat 是 REJECT的,所以端口映射被拒绝。

解决方法:

                                                            vim /etc/sysconfig/iptables                                                                          ##注释掉下面这一行,这行的意思是拒绝掉所有的FORWARD,拒绝的提示信息是icmp-host-prohibited(禁止)                                                                          #-A FORWARD -j REJECT --reject-with icmp-host-prohibited                                                                                                                                         #重启iptables                                                                          systemctl restart iptables.service                       

网上其他的解决方法:基本都是重置docker0网络,重启docker

                                                            pkill docker                                                                           iptables -t nat -F                                                                           ifconfig docker            0             down                                                                           brctl delbr docker            0                                                                           docker -d                                                                           ##重启docker服务                                                                          systemctl restart docker                      

网上有的说是只重启docker即可,即只执行systemctl restart docker,我自己也是这样解决掉问题的。

如果还是不行的话,就按照上面的方式试一试,可能是网络原因造成的

可以参考

docker 报错整理

docker学习笔记之七:解决 -i docker0: iptables: No chain/target/match by that name.

这两篇文章写的还是比较透彻的,主要就是防火墙映射转发之类的,需要了解下防火墙相关的只是,因此暂时不做深入了解,等有时间了再好好研究防火墙。




本文转自@TWT社区。

【前言】至少,以Docker和kubernetes为代表的容器技术日新月异,但我们在容器的使用过程中,也会碰到各种损坏和难题。出有针对性的说明和解决方案,希望可以帮助到大家去快速定位和解决类似问题故障。

具有超过十年的互联网运维及五年以上团队管理经验,多年容器云的运维,尤其是在Docker和kubernetes领域非常精通。


Docker是一种相对使用较简单的容器,我们可以通过以下几种方式获取信息:

1,通过docker run执行命令,或许返回信息

2,通过docker logs去获取日志,做有针对性的筛选

3,通过systemctl status docker查看docker服务状态

4,通过journalctl -u docker.service查看日志

以下是整理的docker容器类问题故障,分为9个类


一,启动类故障

1,

docker:无法通过unix:///var/run/docker.sock连接到Docker守护程序。泊坞窗守护程序正在运行吗?

原因:Docker未正常启动

解决方式:

systemctl启动docker

2,

无法创建Unix套接字/var/run/docker.sock:是目录

原因:docker.sock不能创建

解决方式:

rm -rf /var/run/docker.sock

然后重新启动docker

3,

docker.service的作业失败。无法启动Docker应用程序

%20%20%20%20%20%20%20
%20%20%20

原因:Selinux引起

%20%20%20

解决方式:

%20%20%20

/%20etc%20/%20sysconfig%20/%20selinux,将selinux值替换为禁用

%20%20%20

重启docker解决

%20%20%20

4,

%20%20%20

泊坞窗:来自守护程序的错误响应:

%20%20%20

/%20var%20/%20lib%20/%20docker%20/%20overlay%20/%20XXXXXXXXXXXXXXXXXXXXXXXXXX:无此类文件或目录。

%20%20%20

原因:docker没有指定目录或文件

%20%20%20

解决方式:

%20%20%20

systemctl停止docker

%20%20%20

rm%20-rf%20/%20var%20/%20lib%20/%20docker%20/%20*

%20%20%20

systemctl启动docker

%20%20%20

重启run重新启动容器

%20%20%20

5,

%20%20%20

泊坞窗:来自守护程序的错误响应:冲突。容器名称“%20XXX”已被容器“%20XXX”使用。您必须删除(或重命名)该容器才能重用该名称。

%20%20%20

原因:码头工人名字重名

%20%20%20

解决方式:

%20%20%20

改名容器或者删除重建容器

%20%20%20

6,

%20%20%20

错误:连接激活失败:找不到适合此连接的设备

%20%20%20

原因:网卡配置问题

%20%20%20

解决方式:

%20%20%20

重启网卡

%20%20%20

7,

%20%20%20

系统重启后docker无法启动

%20%20%20

报错为:docker0:iptables:该名称没有链/目标/匹配

%20%20%20

原因:docker服务iptables问题

%20%20%20

解决方式:

%20%20%20

重启docker服务系统重启docker

%20%20%20

8,

%20%20%20

启动守护程序时出错:初始化graphdriver时出错:不支持驱动程序

%20%20%20

使用overlay2存储驱动启动docker%20daemon报错

%20%20%20

原因:daemon经济配置

%20%20%20

解决方式:

%20%20%20

添加配置:

%20%20%20

/etc/docker/daemon.json

%20%20%20

{“存储驱动器”:“%20overlay2”,

%20%20%20

“存储选项”:[“%20overlay2.override_kernel_check%20=%20true”]}

%20%20%20

9,

%20%20%20

无法启动docker.service:单位docker.service被屏蔽。

%20%20%20

未知原因:docker被遮罩

%20%20%20

解决方式:

%20%20%20

systemctl取消屏蔽docker.service

%20%20%20

systemctl取消屏蔽docker.socket

%20%20%20

systemctl启动docker.service

%20%20%20

10,

%20%20%20

无法启动docker.service:单元未正确加载:参数无效。

%20%20%20
%20%20%20%20 %20%20%20%20%20%20%20
%20%20%20

未知原因:docker服务无法正常加载

%20%20%20

解决方式:

%20%20%20

卸载docker,删除docker.service

%20%20%20

重新安装docker

%20%20%20

11,

%20%20%20

docker-compose启动容器时报错:

%20%20%20

/usr/lib/python2.7/site-packages/requests/init.py:80:RequestsDependencyWarning:urllib3(1.22)或chardet(2.2.1)与支持的版本不匹配!RequestsDependencyWarning)

%20%20%20

未知原因:pip相应组件版本不支持

%20%20%20

解决方式:

%20%20%20

pip卸载urllib3

%20%20%20

pip卸载chardet

%20%20%20

点安装请求

%20%20%20

12,docker容器重启故障

%20%20%20

强杀docker进程后,重启docker。docker中的容器无法启动并报错

%20%20%20

docker%20restart%20XXXXXXX来自守护程序的错误响应:无法重新启动容器XXXXXXX:容器“%20XXXXXXXXXXXXXXXX”:已存在

%20%20%20

原因:旧容器未安全退出

%20%20%20

解决方式:

%20%20%20

docker-containerd-ctr%20--address%20/run/docker/containerd/docker-containerd.sock%20--namespace%20c%20rm%20<容器hash_id>

%20%20%20

码头工人开始容器

%20%20%20

13,

%20%20%20

docker重启错误-重启命令一直卡住

%20%20%20

systemctl重新启动docker卡住

%20%20%20

未知原因:可能是启动的容器数量过多,或者磁盘IO问题

%20%20%20

解决方式:

%20%20%20

systemctl启动docker-cleanup.service

%20%20%20

systemctl启动docker

%20%20%20

%20%20%20

二,权限问题报错

%20%20%20

14,

%20%20%20

尝试连接到unix:///var/run/docker.sock的Docker守护程序套接字时获得的权限被拒绝

%20%20%20

解决方式:

%20%20%20

查看/var/run/docker.sock其中用户组

%20%20%20

将用户重新加入docker组中,usermod%20-aG%20docker%20$%20{USER}

%20%20%20

15,

%20%20%20

在步骤GROUP中使用chown%20socket:没有此类过程

%20%20%20
%20%20%20%20 %20%20%20%20%20%20%20
%20%20%20

原因:docker无法找到Group组信息,docker组有可能被误删除,

%20%20%20

解决方式:

%20%20%20

groupadd泊坞窗

%20%20%20

16,

%20%20%20

发布http:///var/run/docker.sock/http://v1.XXX%20/%20auth:拨打unix%20/var/run/docker.sock:权限被拒绝。您是否要连接到没有TLS的启用TLS的守护程序?

%20%20%20

原因:非Root用户管理Docker时,权限不足

%20%20%20

解决方式:

%20%20%20

groupadd泊坞窗

%20%20%20

usermod%20-a%20-G%20docker用户

%20%20%20

17,

%20%20%20

码头工人犯错误

%20%20%20

处理tar文件时出错(退出状态1):意外的EOF

%20%20%20

原因:可能是权限问题引起

%20%20%20

解决方式:

%20%20%20

chmod%20+%20x加一个执行权限

%20%20%20

%20%20%20

三,总体和仓库问题报错

%20%20%20

18,

%20%20%20

获取https://registry-1.docker.io/v2/:拨打tcp:查找注册表http://-1.docker.io

%20%20%20

原因:Docker仓库无法访问

%20%20%20

解决方式:

%20%20%20

修改Docker仓库源为国内或者自建的仓库源

%20%20%20

修改/etc/docker/daemon.json

%20%20%20

19,推出本地可行性报错

%20%20%20

推送指向存储库[XXXX]获取https://%20xxx%20/%20v1%20/%20_ping:http:服务器向HTTPS客户端提供了HTTP响应

%20%20%20

原因:docker%20Registry未采用https服务所致

%20%20%20

解决方式:

%20%20%20

/etc/docker/daemon.json文件写入:

%20%20%20

{“不安全的注册表”:[“”]}

%20%20%20

20,

%20%20%20

/%20usr%20/%20bin%20/%20docker-current:来自守护程序的错误响应:oci运行时错误:container_linux.go:启动容器进程导致“%20exec:\”%20/%20bin%20/%20bash%20\”:在$%20PATH中找不到可执行文件”。

%20%20%20

原因:Docker本身的固有问题或Docker引擎版本比较低导致

%20%20%20

解决方式:

%20%20%20

可以升级Docker版本服务

%20%20%20

21,精心设计,执行chown%20-R非常慢

%20%20%20

原因:Docker使用写时复制策略,所以chown命令执行时,将上层副本文件全部复制到当前层,然后再修改权限,再写入文件系统。

%20%20%20

解决方式:

%20%20%20

不应该使用chown%20-R类别大批量修改文件的命令

%20%20%20

22,docker%20build造就的的时候报错:

%20%20%20

来自syslogd内核的消息:unregister_netdevice:等待lo释放。使用次数=%201

%20%20%20

原因:docker%20engine版本过高

%20%20%20

解决方式:

%20%20%20

docker引擎版本需要和docker内部附加的内核版本匹配

%20%20%20

23,

%20%20%20

泊坞窗:来自守护程序的错误响应:容器:容器未在指定的超时之前启动。ERRO[0133]从守护程序获取事件的错误:上下文已取消

%20%20%20

原因:修改完docker%20root%20dir,重启后,下载多个报错

%20%20%20

解决方式:

%20%20%20

重启docker服务

%20%20%20

或者重启服务器

%20%20%20

%20%20%20

四,资源问题报错

%20%20%20

25,

%20%20%20

Docker设备上没有剩余空间

%20%20%20

原因:空间不足

%20%20%20

解决方式:清理空间,删除删除使用的容器,额外等资源

%20%20%20

码头工人系统修剪-a

%20%20%20

26,

%20%20%20

/%20var%20/%20lib%20/%20docker%20/%20containers占用过大

%20%20%20

原因:日志文件占用过大

%20%20%20

解决方式:

%20%20%20

cat%20/%20dev%20/%20null>%20*%20-json.log

%20%20%20

或者

%20%20%20

增加dockerd启动参数,/%20etc%20/%20docker%20/%20daemon.json

%20%20%20

{“%20log-driver”:“%20json-file”,

%20%20%20

“%20log-opts”:{“%20max-size”:“%202G”,“%20max-file”:“%2010”}

%20%20%20

27,

%20%20%20

最大虚拟内存区域vm.max_map_count%20[65530]太低,至少增加到[262144]

%20%20%20

原因:系统参数预设配置过小

%20%20%20

解决方式:

%20%20%20

修改/etc/sysctl.conf里面的vm.max_map_count调大

%20%20%20

28,

%20%20%20

无法启动容器进程导致“%20process_linux.go:301:

%20%20%20

正在运行的exec%20setns进程进行初始化,导致\“退出状态40%20\”“:未知。

%20%20%20

%20%20%20

原因:可能是缓存问题引起

%20%20%20

解决方式:

%20%20%20

回声1>%20/%20proc%20/%20sys%20/%20vm%20/%20drop_caches

%20%20%20

29,

%20%20%20

docker本机启动多台容器导致出现后续容器启动失败

%20%20%20

原因:查看硬盘空间是否满,如果不是硬盘空间问题引起

%20%20%20

解决方式:

%20%20%20

vim%20/etc/sysctl.conf

%20%20%20

添加参数fs.aio-max-nr%20=%201048576

%20%20%20

sysctl%20-p

%20%20%20

30,Docker启动异常,状态反复重启

%20%20%20
%20%20%20%20 %20%20%20%20%20%20%20
%20%20%20

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

%20%20%20

查看/%20var%20/%20log%20/消息

%20%20%20
%20%20%20%20 %20%20%20%20%20%20%20
%20%20%20

原因:内存跑满,引起OOM

%20%20%20

解决方式:

%20%20%20

释放内存后,再启动容器

%20%20%20

%20%20%20

五,版本不兼容报错

%20%20%20

31,

%20%20%20

overlayfs:即使在ext4上,也无法删除从基本层移至新创建的目录的文件

%20%20%20

原因:Centos提供的文件系统XFS和Overlay兼容问题导致,

%20%20%20

解决方式:

%20%20%20

这个问题的修复在内核4.4.6以上

%20%20%20

32,

%20%20%20

泊坞窗:来自守护程序的错误响应:OCI运行时创建失败:container_linux.go:344:启动容器进程导致“%20process_linux.go:297:从管道获取最终子进程的pid导致\“读取init-p:连接被同级重置\”%20”:未知。

%20%20%20

原因:Docker版本和操作系统版本不匹配

%20%20%20

解决方式:

%20%20%20

重新安装和操作系统内核支持的docker版本

%20%20%20

%20%20%20

六,网络或端口问题报错

%20%20%20

33,

%20%20%20

警告:IPv4转发已禁用。网络将无法正常工作。

%20%20%20

原因:ipv4网络无法转发

%20%20%20

解决方式:

%20%20%20

/usr/lib/sysctl.d/00-system.conf

%20%20%20

在最后一行添加net.ipv4.ip_forward%20=%201

%20%20%20

重启网络服务。删除错误的容器,再次创建新容器

%20%20%20

34,

%20%20%20

使用默认驱动程序创建网络“%20xxxxxxx”

%20%20%20

原因:docker网关冲突

%20%20%20

启动容器,docker-compose启动容器后,断网问题

%20%20%20

解决方式:

%20%20%20

配置docker-compose.yml内给启动器的容器配置参数network_mode:“%20bridge”

%20%20%20

35,

%20%20%20

找不到满足以下条件的节点[端口xxxx]

%20%20%20

原因:当容器使用端口映射(docker%20run%20-p%20xxxx:xxxx或compose模板中的

%20%20%20

ports)之后系统会在主机上创建一个端口,通过NAT来访问容器的指定端口。如果主机上的端口被容器或系统进程占用,则会导致端口分配失败。

%20%20%20

解决方式:

%20%20%20

清除占用端口的容器或者进程,或调整容器端口映射的主机机端口避免冲突

%20%20%20

36,

%20%20%20

来自守护程序的错误响应:名称为xxx的服务端点已经

%20%20%20

原因:端口已经被占用

%20%20%20

解决方式:

%20%20%20

重启docker容器

%20%20%20

37,

%20%20%20

泊坞窗:来自守护程序的错误响应:驱动程序无法对端点XXXXX上的外部连接进行编程:绑定0.0.0.0:80失败:端口已分配

%20%20%20

原因:容器端口冲突

%20%20%20

解决方式:

%20%20%20

更换主机机绑定端口

%20%20%20

%20%20%20

七,Docker安装报错

%20%20%20

38,安装docker报要求:container-selinux>%20=%202.9

%20%20%20
%20%20%20%20 %20%20%20%20%20%20%20
%20%20%20

原因:container-selinux版本低或者是没安装的原因

%20%20%20

解决方式:

%20%20%20

wget%20-O%20/etc/yum.repos.d/CentOS-Base.repo

%20%20%20

http://mirrors.aliyun.com/repo/Centos-7.repo

%20%20%20

百胜安装epel-release

%20%20%20

yum%20makecache

%20%20%20

yum%20install%20container-selinux

%20%20%20

39,安装docker-compose时报错

%20%20%20

“%20ImportError:'模块'对象没有属性'check_specifier'”

%20%20%20

原因:setuptools版本问题

%20%20%20

解决方式:

%20%20%20

升级setuptools到30.1.0版本以上版本

%20%20%20

pip%20install%20--upgrade%20setuptools

%20%20%20

40,安装docker-compose时报错

%20%20%20

声明:Python%202.7将于2020年1月1日到期,请升级您的Python,因为在该日期之后将不再维护Python%202.7。pip的未来版本将放弃对Python%202.7的支持。

%20%20%20

原因:python2.7提示升级

%20%20%20

解决方式:

%20%20%20

点安装-i%20https://pypi.douban.com/simple%20docker-compose

%20%20%20

%20%20%20

八,Docker删除报错

%20%20%20

41,docker删除容器报错

%20%20%20

来自守护程序的错误响应:驱动程序覆盖无法删除根文件系统xxxxx:remove%20/%20var%20/%20lib%20/%20docker%20/%20overlay2%20/%20xxxxx%20/%20merged:设备或资源繁忙

%20%20%20
%20%20%20%20 %20%20%20%20%20%20%20
%20%20%20

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

%20%20%20

解决方式:

%20%20%20

grep%20docker%20/%20proc%20/%20*%20/%20mountinfo%20|%20grep%20xxxxx

%20%20%20

kill进程后

%20%20%20

再重新删除容器

%20%20%20

42,状态死机的容器删除报错

%20%20%20

来自守护程序的错误响应:驱动程序aufs无法删除根文件系统XXXXXXXXXXXXXXXX:aufs:重试后卸载错误:/%20var%20/%20lib%20/%20docker%20/%20aufs%20/%20mnt%20/%20xxxxxxxx:设备或资源繁忙

%20%20%20

原因:dead状态容器无法删除,还在占用资源

%20%20%20

解决方式:

%20%20%20

docker%20rm%20-fv容器id过几分钟后会自动删除

%20%20%20

43,泊坞窗删除错误报错

%20%20%20

来自守护程序的错误响应:冲突:无法删除存储库引用“%20XXXX”(必须强制)-容器XXXX正在使用其引用的映像YYYY

%20%20%20

原因:必然正在被某容器使用

%20%20%20

解决方式:

%20%20%20

需要删除相关ID容器后,才能删除

%20%20%20

44,码头工人删除错误报错

%20%20%20

来自守护程序的错误响应:冲突:无法删除XXXXXXXXXX(必须强制执行)-在多个存储库中引用了图像

%20%20%20

原因:重新登录push了更长的其他仓库

%20%20%20

解决方式:

%20%20%20

如果不需要此补充,docker%20rmi%20-f强删

%20%20%20

45,泊坞窗删除错误报错

%20%20%20

来自守护程序的错误响应:冲突:无法删除XXX(无法强制执行)-图像具有相关的子图像

%20%20%20

原因:存在依赖于父本身的子整合

%20%20%20

解决方式:

%20%20%20

强制删除或者或者批量删除容器,再删除更多

%20%20%20

%20%20%20

九,其他报错

%20%20%20

46,docker:来自守护程序的错误响应:驱动程序无法对端点XXXXXXX上的外部连接进行编程:(%20iptables失败:iptables%20--wait%20-t过滤器-A%20DOCKER!-i%20docker0%20-o%20docker0%20-p%20tcp%20-d%20172.17.0.2-%20-dport%208080%20-j接受:iptables:该名称没有链/目标/匹配。

%20%20%20

原因:防火墙问题引起

%20%20%20

解决方式:

%20%20%20

关闭防火墙,重启docker

%20%20%20

47,

%20%20%20

执行docker%20info出现如下警告

%20%20%20

警告:bridge-nf-call-iptables已禁用

%20%20%20

警告:bridge-nf-call-ip6tables已禁用

%20%20%20

原因:配置问题引起,需要启用bridge-nf-call-iptables

%20%20%20

解决方式:

%20%20%20

vi%20/etc/sysctl.conf

%20%20%20

添加以下内容

%20%20%20

net.bridge.bridge-nf-call-ip6tables%20=%201

%20%20%20

net.bridge.bridge-nf-call-iptables%20=%201

%20%20%20

net.bridge.bridge-nf-call-arptables%20=%201

%20%20%20

48,

%20%20%20

docker数据库相关报错

%20%20%20

使用Docker创建mysql容器闪退

%20%20%20

数据库未初始化,并且未指定密码选项

%20%20%20
%20%20%20%20

解决方式:

docker运行-d -e MYSQL_ROOT_PASSWORD = [密码] -p 3306:3306 mysql

为避免出现各种奇怪且偶发的问题,运维和开发人员应该有规范的去使用docker容器,最大程度的去避免因为使用不当而引起的故障,参考以下:

Docker使用规范建议

尽量使用最近1-2年的新的稳定的docker版本
不要去安装今年前很老的版本,大量的bug已经被新版本更新解决掉了
尽量不要去创造非常大的替代,例如5G10G以上的
最好要轻量化,去除多余的软件,数据等
容器内挂载宿主机配置,使用替代
容器需要-v主机的配置文件,尽量使用ro替换
数据要挂载主机机物理硬盘或存储矩阵上
不要直接在容器里运行,避免容器停机机引起数据丢失
应用日志一定要挂到宿主机上
不要直接打印到容器内部,避免只能docker logs方式查看,避免去vulume目录里查看日志
不要只使用latest标签
标签要有个管理标准,可以根据标签查找对应版本
不要使用容器ip,配置里更不能写死(至少172.17.0.x)
容器重启后,ip很可能会变
尽量不要在单容器内跑多进程
容器不是虚拟机,尽量做到1个容器,1个进程
跨环境可持续保持一致
绝对是测试,UAT,生产环境,尽量保持同一个副本,不要变更,环境变更只需要变更环境变量参数做区别
一定监控docker容器,即使发现问题
建议使用prometheus监控容器
一定要限制docker容器的资源
尤其是CPU,内存,硬盘空间,甚至是网络等,避免侵害占用主机机的硬件资源







yaoshengting

启动docker容器时报iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport错误

同创永益

干货丨Docker容器九类常见故障排查及处理

点击全文阅读

郑重声明:

本站所有活动均为互联网所得,如有侵权请联系本站删除处理

我来说两句