一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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 上。

  1. 别硬记 IP,也别改 hosts 文件——Docker 本就不打算让你这么干
  2. 创建自定义 bridge 网络,它自带 DNS 解析:

    docker network create mynet

  3. 启动容器时显式加入:

    docker run -d --name db --network mynet postgres

    docker run -it --network mynet alpine ping db

容器能 ping 通 IP,但访问不了外网?NAT 或 DNS 没兜住

常见于宿主机开了防火墙、iptables 被清过、或 resolv.conf 被覆盖。容器里 ping 8.8.8.8 成功但 nslookup google.com 失败,基本就是 DNS 问题。

  1. 先确认宿主机本身能上网、DNS 正常
  2. 检查容器内 /etc/resolv.conf 是否指向 127.0.0.11(Docker 内置 DNS)
  3. 若被覆盖,启动时加 --dns 8.8.8.8 临时验证;长期方案是配置 daemon.json 的 dns 字段
  4. 确保 iptables FORWARD 链默认策略为 ACCEPT,否则 NAT 流量被丢弃

端口映射后外部访问不到?流量根本没进来

-p 8080:80 写对了,但浏览器打不开,通常不是容器问题,而是宿主机层面拦截或转发没生效。

  1. docker port <容器名> 确认端口是否真映射成功
  2. 在宿主机执行 curl localhost:8080,排除网络路径问题
  3. 检查 iptables 是否有对应 DNAT 规则:

    sudo iptables -t nat -L DOCKER -n

  4. 云服务器还要看安全组/防火墙是否放行 8080 端口

多个容器启动顺序乱、依赖断掉?别靠 IP 或启动时机

一个容器启动快,另一个慢半拍,硬写 db:5432 却连不上——不是网络不通,是服务还没就绪。

  1. Docker 本身不保证启动顺序,也不等服务 ready
  2. 应用层要做重试(比如连接数据库前循环 sleep + telnet 检查)
  3. 编排场景优先用 docker-compose,它自动建专属 bridge 网络 + 支持 healthcheck + restart_policy
  4. 避免在容器内用 localhost 访问同网络其他服务——那是宿主机回环,不是容器间通信

热门栏目