docker同机器不同network通讯
在Docker中,如果你想让位于同一台机器上但属于不同Docker网络的容器能够通讯,你需要确保网络之间能够互相访问。Docker提供了默认的bridge
网络,但如果你创建了额外的网络,容器之间默认不能直接通讯,除非你显式地配置它们。
以下是一个简单的示例,演示如何设置两个容器在同一台机器上通过不同的Docker网络进行通讯:
- 创建两个Docker网络:
docker network create --driver bridge my_network1
docker network create --driver bridge my_network2
- 启动两个运行在不同网络的容器:
docker run --network my_network1 -d --name container1 busybox /bin/sh -c "while true; do sleep 3600; done"
docker run --network my_network2 -d --name container2 busybox /bin/sh -c "while true; do sleep 3600; done"
- 使用
docker exec
进入其中一个容器,并尝试ping另一个容器:
docker exec -it container1 sh
/ # ping container2
如果你按照上面的步骤操作,你会发现无法ping通另一个容器,因为它们位于不同的Docker网络中。为了让它们可以通讯,你需要在网络之间添加路由规则或者使用用户定义的桥接网络。
- 为容器配置静态路由(不推荐,不同网络间通常应通过网络设计或服务发现机制进行通信):
在一个网络中的容器执行以下命令,添加到另一网络的静态路由:
/ # route add -net 172.20.0.0 netmask 255.255.0.0 gw <另一网络容器的IP>
请注意,上述命令中的172.20.0.0/16
是Docker默认分配的网段,如果你的网络配置与此不同,需要相应地修改。
- 使用桥接网络,确保容器能够在同一台机器上的不同网络间通讯:
docker network connect bridge container2
这样,container2
将能够通过bridge
网络访问container1
,因为Docker的bridge
网络是所有容器默认连接的。
总结,要使同一台机器上的不同Docker网络中的容器能够通讯,你需要确保网络之间互相可达,或者将容器配置到共享的网络(如bridge
网络)中。
本文由 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为: 2024/10/09 08:10