我想知道网络A中的容器如何访问网络B中的容器。
两个Docker网络都在同一个Docker主机上。
我没有在任何地方找到这个答案。 此外,我尝试使用iptables规则但没有成功。
答案 0 :(得分:1)
您可以将容器连接到多个网络,但是您需要create
它们,然后连接网络,然后start
它们 - run
命令不允许您指定多个网络
示例 - 创建两个网络:
docker network create net-1
docker network create net-2
现在创建两个容器,最初将它们连接到不同的网络(此图像只是ubuntu,安装了ping
等工具):
> docker create --name ub1 --network net-1 sixeyed/ubuntu-with-utils sleep infinity
6bdf4f41d8484516e329e572356f1770ba3da5062bf5ab6fc584db294ef13865
> docker create --name ub2 --network net-2 sixeyed/ubuntu-with-utils sleep infinity
8424d296104e082e1d0bc1468332b3143459cba9bdeeb21d320709d51048e14d
创建后(它们尚未运行),您可以将它们连接到其他网络:
> docker network connect net-2 ub1
> docker network connect net-1 ub2
然后启动它们:
> docker start ub1
ub1
> docker start ub2
ub2
现在容器可以通过名称相互访问:
> docker exec -it ub1 ping -c 1 ub2
PING ub2 (172.19.0.3) 56(84) bytes of data.
64 bytes from ub2.net-1 (172.19.0.3): icmp_seq=1 ttl=64 time=0.053 ms
> docker exec -it ub2 ping -c 1 ub1
PING ub1 (172.19.0.2) 56(84) bytes of data.
64 bytes from ub1.net-1 (172.19.0.2): icmp_seq=1 ttl=64 time=0.077 ms
您可以对Compose执行相同操作,为服务指定多个网络。
答案 1 :(得分:0)
如果您需要在同一主机上从一个容器访问另一个容器,则可以使用--link
命令中的Docker docker run
选项或docker-compose.yml文件轻松获取。
它将允许每个容器查看另一个容器并通过其名称引用它(就像您在 / etc / hosts 中添加了自定义条目一样)。
例如:docker run -d --link container1:container1 --name container2 image2:latest
这将允许您通过名称访问container2中的container1(例如在container2中运行ping container1
)。
请参阅Docker文档中的communication-across-links。