怎么在Docker中利用Network配置容器间的内网互通

星墨同学_7783

星墨同学_7783

2026-04-10

972人浏览

原创

容器默认bridge网络不支持互通和dns解析,需创建自定义bridge网络(如mynet)并指定--network接入,才能通过容器名通信;启动顺序问题需应用层重试或健康检查,非网络配置问题。

怎么在docker中利用network配置容器间的内网互通

容器默认使用 bridge 网络,但不同 docker run 启动的容器默认不互通

新启动的容器如果不指定 --network,会自动接入默认的 bridge 网络。但这个默认网络不支持容器名解析(即不能用 ping myapp),且部分宿主机防火墙或 iptables 规则可能拦截跨容器通信。你看到 curl: (7) Failed to connect 或 Connection refused,大概率不是服务没起来,而是网络没通。

解决办法是显式创建自定义 bridge 网络,它自带 DNS 解析和隔离能力:

  • 运行 docker network create mynet 创建一个叫 mynet 的桥接网络
  • 启动容器时加 --network mynet,例如:docker run --network mynet --name db -d postgres:15
  • 另一容器也加入同一网络:docker run --network mynet --name app -e DB_HOST=db -d mywebapp

此时 app 容器内可以直接用 db 当主机名访问数据库,无需查 IP,也不用手动改 /etc/hosts。

多个容器想复用同一网络,但启动顺序不确定怎么办

容器名在启动时才注册进网络 DNS,如果 app 先启动、db 后启动,app 初始化时解析 db 会失败——这不是网络配置问题,而是应用层未做重试或健康等待。

常见应对方式有:

  • 用 depends_on + 自定义健康检查(仅 Compose v2.3+ 有效):depends_on: { db: { condition: service_healthy } }
  • 在应用启动脚本里加简单轮询,比如 until nc -z db 5432; do sleep 2; done
  • 避免依赖容器名启动:把 DB_HOST 改成 db:5432 字符串传入,让应用自己处理连接失败重试

注意:depends_on 不保证端口就绪,只保证容器进程已启动;DNS 解析成功 ≠ 服务可连,这点容易被忽略。

Dolphindb Docker
Dolphindb Docker

自动化 DolphinDB Docker 部署,支持自动架构检测(ARM64/x86_64),智能内存分配(50% 规则)以及完整数据持久化。

下载

想让容器既能访问内网服务,又能连外网,该选 host 还是自定义 bridge

host 模式确实能直通宿主机网络,但会丢失容器网络隔离、无法用容器名通信、端口冲突风险高,还可能绕过 Docker 的 iptables 链导致安全策略失效。绝大多数场景不该选它。

正确做法是保持自定义 bridge 网络,并确认以下两点:

  • 该网络的 com.docker.network.bridge.enable_ip_masquerade 属性为 true(默认开启),保证出向 NAT 正常
  • 宿主机没禁用 FORWARD 链,比如某些云服务器厂商的默认安全组或 firewalld 规则会 DROP 转发包
  • 如需容器访问宿主机上的服务(比如本地 MySQL),用特殊 DNS 名 host.docker.internal(Mac/Windows 原生支持;Linux 需加 --add-host=host.docker.internal:host-gateway)

docker-compose.yml 中 network 配置写错的典型表现

写错最直接的结果是:容器启动成功,日志里却反复报 getaddrinfo EAI_AGAIN db 或 Connection refused,而 docker network inspect mynet 显示容器根本不在该网络里。

高频错误包括:

  • 忘记在 services 下声明 networks: 块,只在根级写了 networks: 定义
  • 容器指定了 network_mode: "bridge",覆盖了 networks: 配置,退回到默认 bridge
  • 网络名拼错,比如写成 mynet 和 my-net 混用,Docker 不报错但实际分属两个网络
  • 用了 external: true 却没提前 docker network create mynet,导致 compose 启动失败

排查时优先跑 docker network inspect mynet | jq '.Containers',看目标容器 ID 是否在列表中——这是比查日志更快的验证手段。

自定义网络本身很简单,难的是理解“容器名 = DNS 记录”这个隐含契约,以及它只在同一个网络内生效。跨网络调用必须走 IP 或额外暴露端口,没有捷径。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

docker

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

437

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

900

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2772

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

936

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

829

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

414

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2516

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4652

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

747

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpMyAdmin 安装文档
phpMyAdmin 安装文档

共0课时 | 0人学习

Docker 官方文档
Docker 官方文档

共0课时 | 0人学习

宝塔 Docker 模块使用手册
宝塔 Docker 模块使用手册

共0课时 | 0人学习