You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅用Docker工具实现不同容器间网络设备及子网共享?

解决方案

要仅通过Docker工具实现container2访问container1中my-device对应的192.168.0.0/16子网,有两种可行的原生方案,无需修改主机iptables:

方案1:直接共享container1的网络命名空间

这种方式让container2完全复用container1的网络栈,包括网络设备、路由表和端口,是最直接的实现方式。

操作步骤

启动container2时指定复用container1的网络:

docker run -d --name container2 --net container:container1 <你的镜像名>

若container2已运行,需先停止重建:

docker stop container2
docker rm container2
docker run -d --name container2 --net container:container1 <你的镜像名>

优缺点

  • 优点:配置简单,无需额外路由设置,container2自动拥有和container1一致的网络能力
  • 缺点:两个容器完全共享网络栈,端口会冲突,网络隔离性差

方案2:自定义网络+静态路由(推荐,保持网络隔离)

这种方式让两个容器在同一自定义Docker网络中,通过给container2添加静态路由,将192.168.0.0/16的流量指向container1,同时开启container1的IP转发实现流量中转。

操作步骤

  1. 确保container1开启IP转发
    启动container1时添加sysctl参数自动开启:
docker run -d --name container1 --sysctl net.ipv4.ip_forward=1 <你的镜像名>

若container1已运行,可进入容器临时开启(重启后失效):

docker exec -it container1 bash -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
  1. 创建自定义Docker网络(未创建时执行)
docker network create --driver bridge my-shared-network
  1. 将两个容器连接到自定义网络
docker network connect my-shared-network container1
docker network connect my-shared-network container2
  1. 获取container1在自定义网络中的IP
docker inspect container1 | grep -A 10 "my-shared-network" | grep "IPAddress"

假设输出得到的IP为172.19.0.2(以实际输出为准)

  1. 给container2添加静态路由
    使用--route参数指定子网路由的网关为container1的IP:
docker network connect --route 192.168.0.0/16 via 172.19.0.2 my-shared-network container2

验证

进入container2查看路由表:

docker exec -it container2 route -n

此时应能看到新增路由条目:

192.168.0.0     172.19.0.2      255.255.0.0     UG    0      0        0 eth1

优缺点

  • 优点:两个容器保持独立网络栈,端口不冲突,网络隔离性好
  • 缺点:需要多步配置,依赖Docker 17.06及以上版本(--route参数从该版本开始支持)

内容的提问来源于stack exchange,提问作者Sergey Kodentsov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 05:10:25