【发布时间】:2016-09-28 09:57:46
【问题描述】:
我想知道网络 A 中的容器如何访问网络 B 中的容器。
两个 Docker 网络都在同一个 Docker 主机上。
我在任何地方都找不到这个答案。 我也尝试使用 iptables 规则但没有成功。
【问题讨论】:
标签: docker
我想知道网络 A 中的容器如何访问网络 B 中的容器。
两个 Docker 网络都在同一个 Docker 主机上。
我在任何地方都找不到这个答案。 我也尝试使用 iptables 规则但没有成功。
【问题讨论】:
标签: docker
您可以将容器连接到多个网络,但您需要先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 执行相同的操作,为服务指定多个网络。
【讨论】:
如果您需要在同一主机上从一个容器访问另一个容器,这很容易通过在docker run 命令或您的 docker-compose.yml 文件中使用 Docker 的--link 选项来实现。
它将允许每个容器看到另一个容器并通过其名称引用它(就像您在 /etc/hosts 中添加了一个自定义条目一样)。
例如:docker run -d --link container1:container1 --name container2 image2:latest
这将允许您通过容器名称访问容器 2 中的容器 1(例如在容器 2 中运行 ping container1)。
请参阅 Docker 文档中的 communication-across-links。
【讨论】: