如何将Docker网络从一台主机复制迁移到另一台主机
Docker自定义bridge网络跨主机迁移方案
报错的核心原因是local作用域的bridge网络属于主机本地资源,不会随容器文件/镜像同步到目标主机,容器启动时找不到指定名称的网络就会抛出network service_backend not found错误。
不需要复制源主机的Docker内部数据文件,直接在目标主机重建配置完全匹配的网络即可,操作步骤如下:
第一步:提取源网络的有效配置
从你提供的docker network inspect结果中,剔除网络ID、创建时间、已关联容器列表这类运行时自动生成的字段,只保留用户自定义的核心配置项:- 驱动类型:bridge
- 网络名称:service_backend
- 子网段:172.18.0.0/16
- 网关:172.18.0.1
- 支持手动挂载容器(Attachable):开启
- 关联标签:
com.docker.compose.network=backend、com.docker.compose.project=service
第二步:在目标主机执行命令创建匹配网络
直接运行以下命令即可生成完全兼容的网络:docker network create \ --driver bridge \ --subnet 172.18.0.0/16 \ --gateway 172.18.0.1 \ --attachable \ --label com.docker.compose.network=backend \ --label com.docker.compose.project=service \ service_backend注意:不要手动指定网络ID、创建时间参数,这类字段由Docker daemon自动生成,强行指定会触发网络配置冲突报错
第三步:验证配置并启动容器
在目标主机执行docker network inspect service_backend,确认子网、网关、驱动、标签参数和源主机一致即可正常启动迁移过来的容器。网络ID、创建时间和源主机不一致不影响业务使用。
批量迁移优化
如果有多台自定义网络需要迁移,可以在源主机执行以下命令自动生成所有自定义网络的创建脚本,直接复制到目标主机执行即可批量重建,不用手动逐个核对参数:
docker network ls --filter type=custom -q | xargs docker network inspect -f '{{range .}}docker network create --driver {{.Driver}} {{if .EnableIPv6}}--ipv6{{end}} {{range .IPAM.Config}}--subnet {{.Subnet}} --gateway {{.Gateway}} {{end}} {{if .Attachable}}--attachable{{end}} {{range $k,$v := .Options}}-o {{$k}}={{$v}} {{end}}{{range $k,$v := .Labels}}--label {{$k}}={{$v}} {{end}}{{.Name}}{{println}}{{end}}'
注意事项
- 禁止直接复制源主机
/var/lib/docker/network目录下的文件到目标主机,这种操作会破坏目标主机的Docker网络栈,触发daemon启动异常、网络不通等问题。 - 如果迁移的容器配置了固定IP地址,必须保证新创建的网络子网段和源主机完全一致,否则容器会报IP地址不在网段内的错误。如果业务中硬编码了容器IP,启动容器时可以追加
--ip 对应原IP地址参数指定固定地址。 - 如果容器之间通过容器名、Docker DNS域名通信,不需要关心容器IP变化,只要网络名称匹配即可正常通信。
内容的提问来源于stack exchange,提问作者Jeremy Wilson
相关产品推荐
相关产品推荐

