概述
前些天,老大让升级Docker版本,后面折腾了一番,成功升级到最新版本Docker,Docker容器啥的都跑起来了,以为一切顺利了,结果第二天就发现容器映射到宿主机的端口无法访问。在宿主机用 curl 127.0.0.1:端口 测试,得到以下反馈
curl: (56) Recv failure: 连接被对方重设
尝试的排查
- 配置检查
sysctl net.ipv4.ip_forward
0 - 未开启转发,1 - 已开启转发。经排查没问题
- 局部重启大法
第一次:
docker restart 容器ID
经过测试,没有解决问题。PS:容器是通过docker-compose启动的
第二次:
service docker restart
service network restart
经测试,没有解决问题。
第三次:
利用docker-compose重启所有服务容器,然后启动的时候发现报了以下错误
ERROR: for ch Cannot start service XX: driver failed programming external connectivity on endpoint XXXX (f18e09def033319d2dc8fb57ac3d2447a09ab5a4b50d6dd3bf9f607ad7e57924): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9009 -j DNAT --to-destination 172.19.0.2:9009 ! -i br-73bbc1354949: iptables: No chain/target/match by that name.
(exit status 1))
好家伙,错误根源出来了,然后执行以下命令解决
service firewalld restart
service docker restart
然后重新启动对应容器即可
总结
我遇到该问题应该是安装新版本的docker时候,将旧版本的卸载了,然后服务器又有Docker容器迁移等,具体根源无法确定,只能知道咋样解决的。
PS:Docker升级之后,最好将firewalld 、docker、服务容器全部都重启一边。
参考链接
docker 启动 nginx 报错 docker0: iptables: No chain/target/match by that name
docker发布的服务无法访问-端口不通问题解决
docker端口映射无法访问的解决