两个Docker网络之间的访问规则

时间:2016-09-27 10:27:44

标签: docker

我想知道网络A中的容器如何访问网络B中的容器。

两个Docker网络都在同一个Docker主机上。

我没有在任何地方找到这个答案。 此外,我尝试使用iptables规则但没有成功。

2 个答案:

答案 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