答案是:docker网络配置核心为“网络驱动+容器归属+连通控制”三层逻辑,需先观察默认bridge网络(docker network ls/inspect),再按需创建支持dns解析的自定义bridge网络(如mynet),或带子网/网关/静态ip的生产级网络(如mynet-prod),并依场景选用bridge/host/none/overlay模式。

从零开始配置和管理 Docker 网络,核心在于理解“网络驱动 + 容器归属 + 连通控制”这三层逻辑。不需要一上来就写复杂脚本,先用默认 bridge 网络跑通容器通信,再按需升级——比如让两个容器能用名字 ping 通、给数据库固定 IP、或让监控工具直连宿主机端口。
看清当前网络状态
打开终端,第一件事不是创建,而是观察:
-
docker network ls:列出所有网络,你会看到
bridge(默认)、host、none这三个预置网络 -
docker network inspect bridge:查看默认网桥详情,重点关注
Subnet(如172.17.0.0/16)和Gateway(如172.17.0.1),这是容器自动获取 IP 的依据 -
docker ps -a:确认哪些容器正在运行,它们目前用的是哪个网络(默认是
bridge)
创建可命名通信的自定义桥接网络
默认 bridge 网络不支持容器名解析(只能靠 IP 互 ping),而自定义 bridge 网络自带 DNS 服务,容器启动后就能直接用 --name 指定的名字互相访问。
- 执行 docker network create mynet,创建一个叫
mynet的新桥接网络 - 启动第一个容器:docker run -d --name web --network mynet nginx
- 启动第二个容器:docker run -it --network mynet alpine ping web —— 能通,说明名字解析已生效
- 如果需要固定 IP,可在 run 时加
--ip 172.18.0.10(前提是子网已提前指定,见下一条)
带子网和网关的定制网络(适合生产环境)
当多个服务要长期共存、IP 需稳定、端口映射要清晰时,建议显式定义子网和网关。
- 创建带规划的网络:docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 mynet-prod
- 启动容器并分配静态 IP:docker run -d --name db --network mynet-prod --ip 172.18.0.10 -p 3306:3306 mysql:8.0
- 注意:静态 IP 必须在 subnet 范围内,且不能与网关冲突;一旦容器启动,IP 就无法动态修改
- 后续其他服务(如 API、缓存)都连到同一个
mynet-prod,它们之间可直接用容器名或固定 IP 通信
按场景切换网络模式
不同业务对网络的要求差异很大,选对模式比调参数更重要:
- bridge:日常开发、测试、多数微服务部署——隔离好、易管理、支持端口映射
- host:性能敏感型工具(如压测 client、网络诊断工具)——去掉 NAT 层,延迟最低,但容器共享宿主机端口,需自行避让
- none:高安全需求容器(如密钥处理、审计日志生成)——仅保留 loopback 接口,彻底断网
-
overlay:跨多台服务器部署(需先
docker swarm init)——用于 Swarm 集群中服务间通信
不复杂但容易忽略:网络配置不是一次性动作。容器停了再启,只要没改 --network 参数,就会回到原网络;想换网络,要么删掉重建,要么用 docker network connect 和 disconnect 动态调整。











