linux容器互通需创建自定义bridge网络(如mynet),启用内置dns实现容器名解析,避免docker0冲突;宿主机需放行forward链并关闭防火墙干扰;跨网络互通须显式连接且dns仅主网有效。

Linux 容器间要互通,核心不是“配接口”,而是让它们落在同一个可路由、可解析的网络平面里。关键在于选择合适的网络模式、创建明确的自定义网络,并避免默认 bridge 的隐式冲突。
用自定义 bridge 网络替代默认 docker0
默认的 docker0 网桥是全局共享的,所有未指定网络的容器都挤进去,容易 IP 冲突、DNS 解析失败、iptables 规则混乱。自定义 bridge 才是生产级互通的基础。
- 创建带子网的独立网络:
docker network create --subnet=172.20.0.0/16 mynet - 启动容器时显式加入:
docker run --network mynet --name app nginx - 已有容器可动态接入:
docker network connect mynet db-container
容器名自动解析比硬编码 IP 更可靠
Docker 在自定义 bridge 网络中默认启用内建 DNS,同一网络内的容器能直接用名字通信,无需记 IP 或手动配置 hosts。
宝塔Linux面板11.8.1为官网当前正式版,新增AI建站能力并经过宝塔网站工程师深度调教,开放自定义AI功能API,同时对WAF进行界面重构和深度优化,提升拦截能力与运维效率。
- 启动时指定名字:
docker run --name db --network mynet postgres - 另一容器里直接
ping db或curl http://db:5432即可通 - 避免用
--ip固定地址——除非有强依赖(如 License 绑定),否则会增加运维负担
确认宿主机转发与防火墙放行
即使网络建好了,容器也可能 ping 不通外网或彼此,常见卡点在宿主机层面:
- 检查 FORWARD 链是否允许流量:
iptables -L FORWARD -n | grep docker,若无 ACCEPT 规则,加一条:iptables -I FORWARD -i br-xxx -o eth0 -j ACCEPT - 确认 Docker 是否接管 iptables:
grep 'iptables' /etc/docker/daemon.json,值应为true - 临时关闭 firewalld 或 ufw 测试是否拦截:
sudo systemctl stop firewalld
跨网络互通需主动连接,不能默认打通
不同自定义网络之间默认隔离,这是安全设计,不是缺陷。如需互通(比如前端和数据库分属两个网络),必须显式操作:
- 将容器连到第二个网络:
docker network connect frontend-net db-container - 此时容器会拥有两张虚拟网卡,分别接入两个子网,可双向通信
- 注意:DNS 仅对主网络生效;跨网访问建议用 IP,或在目标网络中也起一个同名别名










