最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Docker Bridge 网络常见错误如何解
时间:2026-09-04 10:04:47 编辑:袖梨 来源:一聚教程网
默认 bridge 网络不支持 DNS,需创建自定义 bridge 网络(如 mynet)以启用容器名解析;容器无法访问外网多因 DNS 配置错误或 iptables FORWARD 策略非 ACCEPT;端口映射失败常因宿主机防火墙、iptables DNAT 规则缺失或云平台安全组未放行;多容器依赖应通过 healthcheck 与重试机制保障,而非依赖启动顺序。
Bridge 网络用着简单,出问题却很隐蔽——容器重启后连不上、服务名 ping 不通、外部访问失败、DNS 解析卡住……这些问题大多不是 Docker 坏了,而是配置没对上底层逻辑。关键不在“怎么配”,而在“为什么这么配”。
容器间用名字连不上?默认 bridge 不支持 DNS
默认的 bridge 网络(即不指定 --network 时自动用的那个)只做 IP 层转发,不提供内置 DNS 服务。所以 ping container_b 会失败,哪怕两个容器都在 docker0 上。
- 别硬记 IP,也别改 hosts 文件——Docker 本就不打算让你这么干
- 创建自定义 bridge 网络,它自带 DNS 解析:
docker network create mynet - 启动容器时显式加入:
docker run -d --name db --network mynet postgresdocker run -it --network mynet alpine ping db
容器能 ping 通 IP,但访问不了外网?NAT 或 DNS 没兜住
常见于宿主机开了防火墙、iptables 被清过、或 resolv.conf 被覆盖。容器里 ping 8.8.8.8 成功但 nslookup google.com 失败,基本就是 DNS 问题。
- 先确认宿主机本身能上网、DNS 正常
- 检查容器内
/etc/resolv.conf是否指向127.0.0.11(Docker 内置 DNS) - 若被覆盖,启动时加
--dns 8.8.8.8临时验证;长期方案是配置 daemon.json 的dns字段 - 确保
iptables FORWARD 链默认策略为 ACCEPT,否则 NAT 流量被丢弃
端口映射后外部访问不到?流量根本没进来
-p 8080:80 写对了,但浏览器打不开,通常不是容器问题,而是宿主机层面拦截或转发没生效。
- 用
docker port <容器名>确认端口是否真映射成功 - 在宿主机执行
curl localhost:8080,排除网络路径问题 - 检查 iptables 是否有对应 DNAT 规则:
sudo iptables -t nat -L DOCKER -n - 云服务器还要看安全组/防火墙是否放行 8080 端口
多个容器启动顺序乱、依赖断掉?别靠 IP 或启动时机
一个容器启动快,另一个慢半拍,硬写 db:5432 却连不上——不是网络不通,是服务还没就绪。
- Docker 本身不保证启动顺序,也不等服务 ready
- 应用层要做重试(比如连接数据库前循环 sleep + telnet 检查)
- 编排场景优先用
docker-compose,它自动建专属 bridge 网络 + 支持 healthcheck + restart_policy - 避免在容器内用
localhost访问同网络其他服务——那是宿主机回环,不是容器间通信