运行中接入额外网络
docker network connect 与 disconnect 让运行中的容器接入或断开额外网络,不需要重建容器就能让它同时属于多个网络,例如一边接业务网络、一边接监控网络。这在排障与临时拓扑调整时很方便,但本质是事后打补丁:规范做法是在编排文件里一次性定义好网络拓扑。
基本信息
| 连接 | docker network connect 网络 容器,可带 --alias 指定在该网络中的别名 |
|---|---|
| 断开 | docker network disconnect 网络 容器 |
| 典型用途 | 运行中排障、临时接入监控网络、构造多网卡拓扑 |
| 主要风险 | 断开正在承载业务的网络会导致服务立即中断 |
| 持久性 | 动态连接的网络在容器重启后不会自动恢复 |
| 核对方式 | 查看网络成员列表与容器自身的网络信息 |
典型使用场景
- 运行中的容器需要临时接入监控或日志网络
- 排查两个网络之间为何不通:临时把容器接入对方网络验证
- 构造多网卡测试拓扑,验证多出口的路由行为
- 把容器临时接入备份网络做数据抽取
- 迁移期让容器同时访问新旧两套网络,减少切换窗口
使用示例
使用示例
docker network connect monitor-net myapp # 接入额外网络
docker network connect --alias db monitor-net myapp # 指定在该网络内的别名
docker network disconnect monitor-net myapp # 断开
docker network inspect -f '{{range .Containers}}{{.Name}} {{println}}{{end}}' monitor-net
docker inspect -f '{{range $k,$v := .NetworkSettings.Networks}}{{$k}} {{$v.IPAddress}}{{println}}{{end}}' myapp操作与影响
| 操作 | 即时影响 | 后续影响 |
|---|---|---|
| 接入新网络 | 容器获得新地址,无需重启 | 重启后动态接入的网络不会自动恢复 |
| 带别名接入 | 同一网络内可用别名解析 | 别名冲突时解析结果不确定 |
| 断开空闲网络 | 无明显影响 | 拓扑与文档不一致,后续排查困惑 |
| 断开在用网络 | 服务立即中断 | 依赖该网络的调用全部失败 |
| 多网络并存 | 出口按路由优先级选择 | 出口地址不确定,对端白名单可能失效 |
动态改网络属于事后打补丁:排障时临时使用没有问题,但要及时把结论写回编排文件,否则容器重启后拓扑回到旧状态,问题会以「修好了又复发」的形式再次出现。
多网络并存时出口地址由路由优先级决定:对端做来源白名单时,一旦主出口变化就会失败。需要固定出口的业务应显式指定网络优先级,或使用专用的出网通道。