启动时指定网络
运行容器时指定它接入哪个网络,决定了容器能否与谁通信、能否被名称解析。可选预置网络、自定义网络,也可以让容器直接共享宿主网络栈,或复用另一个容器的网络命名空间。网络是创建期配置,事后不能通过重启修改。
基本信息
| 语法 | docker run --network 网络名或模式 |
|---|---|
| 预置模式 | 默认桥接、宿主模式、无网络模式 |
| 自定义网络 | 按名称接入,支持容器名解析,可加别名 |
| 复用模式 | 复用另一个容器的网络命名空间,两者共享地址与端口 |
| 注意 | 宿主模式与复用模式下不能再声明端口映射 |
典型使用场景
- 多服务互通:应用与数据库接入同一自定义网络,用服务名互相访问
- 需要极致网络性能:宿主模式去掉一层地址转换,适合对延迟敏感的场景
- 完全隔离:无网络模式用于只做计算的批处理任务
- 网络排查:起一个带网络工具的容器复用目标容器的网络栈,观察它看到的状态
- 多网络接入:应用同时接入内部网络与对外网络,实现分层通信
常用示例
常用示例
docker run -d --network app-net --name web nginx:1.27-alpine # 接入自定义网络
docker run -d --network host --name agent nginx:1.27-alpine # 共享宿主网络栈
docker run --rm --network none alpine:3.20 ping -c1 127.0.0.1 # 无网络模式
docker run --rm --network container:web nicolaka/netshoot ss -ltnp # 复用目标容器网络
docker network inspect app-net # 核对接入情况几种模式对照
| 模式 | 特点 | 适用场景 |
|---|---|---|
| 默认桥接 | 地址由引擎分配,不支持按名解析 | 临时试验,单容器使用 |
| 自定义网络 | 支持名称解析与别名,隔离清晰 | 常规多容器应用 |
| 宿主模式 | 直接使用宿主网络栈,性能更好 | 需要明确地址与端口的单机服务 |
| 无网络模式 | 无任何网络接口 | 纯计算任务、安全隔离 |
| 复用容器 | 共享另一个容器的网络与地址 | 网络排查与伴随容器 |
配置网络时的注意点
- 接入自定义网络后应用配置里写服务名而不是地址,服务重建也不受影响
- 宿主模式与复用模式的端口由宿主或被复用容器决定,另行映射会报错
- 网络名写错会让启动直接失败,部署脚本里先确认网络存在
- 需要多个网络时逐个接入,注意服务暴露面不要因此扩大
- 别名用于让同一容器在网络里有额外可解析名称,便于平滑迁移
网络在创建容器时确定,改动网络接入需要重建容器。规划多容器应用时先把网络结构定下来,能省掉上线后的大量返工。
复用其他容器的网络命名空间常用在排查场景:工具容器会看到与目标完全相同的网络接口与监听端口,判断问题比在宿主上猜测准确得多。