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

47 篇文章 0 订阅

Docker容器九类常见故障

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

解决方法:


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

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


  
  
  1. pkill docker
  2. iptables -t nat -F
  3. ifconfig docker 0 down
  4. brctl delbr docker 0
  5. docker -d
  6. ##重启docker服务
  7. 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应用程序

原因:Selinux引起

解决方式:

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

重启docker解决

4,

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

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

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

解决方式:

systemctl停止docker

rm -rf / var / lib / docker / *

systemctl启动docker

重启run重新启动容器

5,

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

原因:码头工人名字重名

解决方式:

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

6,

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

原因:网卡配置问题

解决方式:

重启网卡

7,

系统重启后docker无法启动

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

原因:docker服务iptables问题

解决方式:

重启docker服务系统重启docker

8,

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

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

原因:daemon经济配置

解决方式:

添加配置:

/etc/docker/daemon.json

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

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

9,

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

未知原因:docker被遮罩

解决方式:

systemctl取消屏蔽docker.service

systemctl取消屏蔽docker.socket

systemctl启动docker.service

10,

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

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

解决方式:

卸载docker,删除docker.service

重新安装docker

11,

docker-compose启动容器时报错:

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

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

解决方式:

pip卸载urllib3

pip卸载chardet

点安装请求

12,docker容器重启故障

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

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

原因:旧容器未安全退出

解决方式:

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

码头工人开始容器

13,

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

systemctl重新启动docker卡住

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

解决方式:

systemctl启动docker-cleanup.service

systemctl启动docker


二,权限问题报错

14,

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

解决方式:

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

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

15,

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

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

解决方式:

groupadd泊坞窗

16,

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

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

解决方式:

groupadd泊坞窗

usermod -a -G docker用户

17,

码头工人犯错误

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

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

解决方式:

chmod + x加一个执行权限


三,总体和仓库问题报错

18,

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

原因:Docker仓库无法访问

解决方式:

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

修改/etc/docker/daemon.json

19,推出本地可行性报错

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

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

解决方式:

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

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

20,

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

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

解决方式:

可以升级Docker版本服务

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

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

解决方式:

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

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

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

原因:docker engine版本过高

解决方式:

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

23,

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

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

解决方式:

重启docker服务

或者重启服务器


四,资源问题报错

25,

Docker设备上没有剩余空间

原因:空间不足

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

码头工人系统修剪-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,

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

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

解决方式:

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

28,

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

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

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

解决方式:

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

29,

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

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

解决方式:

vim /etc/sysctl.conf

添加参数fs.aio-max-nr = 1048576

sysctl -p

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

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

查看/ var / log /消息

原因:内存跑满,引起OOM

解决方式:

释放内存后,再启动容器


五,版本不兼容报错

31,

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

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

解决方式:

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

32,

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

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

解决方式:

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


六,网络或端口问题报错

33,

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

原因:ipv4网络无法转发

解决方式:

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

在最后一行添加net.ipv4.ip_forward = 1

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

34,

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

原因:docker网关冲突

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

解决方式:

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

35,

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

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

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

解决方式:

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

36,

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

原因:端口已经被占用

解决方式:

重启docker容器

37,

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

原因:容器端口冲突

解决方式:

更换主机机绑定端口


七,Docker安装报错

38,安装docker报要求:container-selinux> = 2.9

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

解决方式:

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

mirrors.aliyun.com/repo

百胜安装epel-release

yum makecache

yum install container-selinux

39,安装docker-compose时报错

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

原因:setuptools版本问题

解决方式:

升级setuptools到30.1.0版本以上版本

pip install --upgrade setuptools

40,安装docker-compose时报错

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

原因:python2.7提示升级

解决方式:

点安装-i pypi.douban.com/simple docker-compose


八,Docker删除报错

41,docker删除容器报错

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

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

解决方式:

grep docker / proc / * / mountinfo | grep xxxxx

kill进程后

再重新删除容器

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

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

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

解决方式:

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

43,泊坞窗删除错误报错

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

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

解决方式:

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

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

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

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

解决方式:

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

45,泊坞窗删除错误报错

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

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

解决方式:

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


九,其他报错

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

原因:防火墙问题引起

解决方式:

关闭防火墙,重启docker

47,

执行docker info出现如下警告

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

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

原因:配置问题引起,需要启用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容器闪退

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

解决方式:

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

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

Docker使用规范建议

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







yaoshengting

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

同创永益

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坦笑&&life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值