news 2026/5/13 10:53:24

Docker容器网络不通排查指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker容器网络不通排查指南

前言

容器跑起来了,但是网络不通——ping不通外网、容器间互相访问不了、端口映射不生效…

这类问题排查比较麻烦,涉及容器网络、宿主机网络、iptables规则等多个层面。这篇整理一套系统的排查流程,覆盖常见的网络问题场景。


一、容器访问不了外网

症状:

dockerexec-it myappping8.8.8.8# 卡住或者 Network is unreachable

第一反应:检查宿主机的IP转发有没有开。

cat/proc/sys/net/ipv4/ip_forward

如果是0,容器的包出不去。开一下:

echo1>/proc/sys/net/ipv4/ip_forward# 永久生效要写到sysctl.conf

还是不通?看下iptables的NAT规则:

iptables -t nat -L -n|grepMASQUERADE

应该有条类似这样的规则:

MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0

没有的话Docker的NAT可能被清掉了,重启Docker一般能恢复:

systemctl restartdocker

还有一个大坑:firewalld。CentOS默认开着,它和Docker的iptables规则会打架。

# 先关了试试systemctl stop firewalld

如果关了就好了,说明是防火墙的问题。正式解决要配置firewalld的docker zone,或者干脆用iptables。

二、容器间网络不通

在同一台机器上,两个容器互相访问不了。

先确认它们在不在同一个网络:

dockerinspect 容器A --format'{{.NetworkSettings.Networks}}'dockerinspect 容器B --format'{{.NetworkSettings.Networks}}'

如果都在默认的bridge网络,有个坑:默认bridge不支持通过容器名访问

dockerexec容器Aping容器B# ping: 容器B: Name or service not known

只能用IP:

# 先拿到IPdockerinspect 容器B --format'{{.NetworkSettings.IPAddress}}'# 172.17.0.3dockerexec容器Aping172.17.0.3# 这样就通了

嫌麻烦的话,用自定义网络:

dockernetwork create mynetdockernetwork connect mynet 容器Adockernetwork connect mynet 容器B# 现在可以用名字了dockerexec容器Aping容器B

自定义网络有内置DNS,会自动解析容器名。

三、端口映射不生效

dockerrun -p8080:80 nginxcurlhttp://localhost:8080# 不通

先确认服务在容器里跑起来没:

dockerexec容器curllocalhost:80

如果容器里能访问说明服务没问题,那问题在外面。

检查点:

1、服务监听的地址对不对:

dockerexec容器netstat-tlnp

如果显示127.0.0.1:80,那外面肯定访问不了,要改成0.0.0.0:80

2、宿主机端口有没有被占:

netstat-tlnp|grep8080

3、防火墙/安全组:

# 本地防火墙firewall-cmd --list-ports# 云服务器别忘了安全组

云服务器安全组没开端口是个常见的坑。

四、DNS解析失败

能ping通IP,但ping域名不行:

dockerexec容器ping8.8.8.8# 通dockerexec容器pingbaidu.com# 不通

看下容器的DNS配置:

dockerexec容器cat/etc/resolv.conf

如果DNS服务器不可达,最简单的办法是启动时指定:

dockerrun --dns8.8.8.8 nginx

或者全局配置,改/etc/docker/daemon.json

{"dns":["8.8.8.8","114.114.114.114"]}

五、跨主机容器通信

这个稍微复杂点。两台机器上的容器默认是不通的,因为各自的bridge网络是隔离的。

最简单的方案:用端口映射,通过宿主机IP访问。

# 机器B上dockerrun -p8080:80 nginx# 机器A上访问curlhttp://机器B的IP:8080

想让容器直接互通的话,要用overlay网络或者第三方方案(Flannel、Calico这些)。

还有个偏门办法:如果两台主机已经通过WireGuard或者其他组网工具连在一起了,可以配静态路由让容器网段互通。不过这个配置比较麻烦,一般不推荐。

六、一键诊断脚本

懒得一个个查,写了个脚本:

#!/bin/bash# 用法: ./check.sh 容器名C=$1echo"=== 检查$C==="echo-e"\n[网络模式]"dockerinspect$C--format'{{.HostConfig.NetworkMode}}'echo-e"\n[IP地址]"dockerinspect$C--format'{{.NetworkSettings.IPAddress}}'echo-e"\n[路由]"dockerexec$Ciproute2>/dev/null||echo"无ip命令"echo-e"\n[DNS]"dockerexec$Ccat/etc/resolv.conf2>/dev/nullecho-e"\n[外网连通性]"dockerexec$Cping-c1-W28.8.8.82>/dev/null&&echo"OK"||echo"不通"echo-e"\n[宿主机IP转发]"cat/proc/sys/net/ipv4/ip_forward

跑一下基本能看出问题在哪。


总结

Docker网络问题90%出在这几个地方:

问题原因解决
容器出不了外网ip_forward没开echo 1 > /proc/sys/net/ipv4/ip_forward
容器出不了外网防火墙拦截检查firewalld/iptables
容器间不通不在同一网络使用自定义网络
端口映射失败服务监听127.0.0.1改成监听0.0.0.0
DNS解析失败DNS服务器不可达指定DNS服务器

排查顺序:网络配置IP转发防火墙规则服务监听地址DNS配置


有问题评论区交流。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 5:33:05

LCD1602仅背光点亮的硬件连接图解说明

LCD1602背光亮但无显示?别急着改代码——这是硬件在对你“眨眼” 你第一次把LCD1602焊上板子,通电——背光“唰”地亮了,心里一喜;可屏幕一片死寂,连两行暗线都不见。你翻遍数据手册、重烧三遍固件、甚至换了个新模块……结果还是一样: 灯亮,字没影 。 这不是玄学,…

作者头像 李华
网站建设 2026/5/14 5:29:03

Qwen3-ASR-0.6B效果展示:越南语顺化方言→中部口音特有声调建模验证

Qwen3-ASR-0.6B效果展示:越南语顺化方言→中部口音特有声调建模验证 1. 为什么这次测试特别值得关注 你可能已经见过不少语音识别模型能听懂标准越南语,但有没有试过让AI听懂顺化话?不是河内的标准腔,也不是胡志明市的南部口音&…

作者头像 李华
网站建设 2026/5/9 10:34:27

工业控制中Keil5安装配置的深度剖析

工业控制中Keil Vision5的实战内功:一个老工程师的调试台笔记 你有没有过这样的经历?凌晨两点,产线停机,PLC固件升级失败,Keil5里红字报错 Error: device not supported ,而设备手册上明明写着“Keil ful…

作者头像 李华
网站建设 2026/5/12 5:19:24

灵感画廊5分钟快速上手:零基础玩转Stable Diffusion艺术创作

灵感画廊5分钟快速上手:零基础玩转Stable Diffusion艺术创作 1. 为什么你不需要懂技术,也能画出惊艳作品 你有没有过这样的时刻:脑海里浮现出一幅画面——晨雾中的青瓦白墙、雨夜霓虹下回眸的侧影、或是机械齿轮与藤蔓共生的幻想图景——可…

作者头像 李华
网站建设 2026/5/9 8:28:37

小白必看:Gemma-3-270m文本生成服务从安装到使用的完整教程

小白必看:Gemma-3-270m文本生成服务从安装到使用的完整教程 你是不是也遇到过这些情况:想试试最新的轻量级大模型,但看到“编译”“CUDA”“量化”就头皮发麻;下载了镜像却卡在第一步,不知道点哪里、输什么、等多久&a…

作者头像 李华
网站建设 2026/5/9 5:09:02

系统学习Arduino开发前的环境准备流程

从“连不上板”到“秒传代码”:Arduino开发环境的底层逻辑与实战破局指南你有没有过这样的经历?刚拆开Arduino Uno,满怀期待插上USB线,打开IDE——端口列表空空如也;换根线、重启电脑、重装驱动……最后发现&#xff0…

作者头像 李华