1

我有两个容器在默认的 docker bridge 网络上运行。守护进程在特定范围内为它们分配一个“临时”IP。

network_mode: bridge -> 172.17.0.X

我怎样才能通过一些别名或名字联系到对方?

4

1 回答 1

2

让我们使用以下容器运行基本映像 Ubuntu:16.04:

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
2461f410228b        ubuntu:16.04        "/bin/bash"         20 minutes ago      Up 20 minutes                           competent_shockley
6da9d8196637        ubuntu:16.04        "/bin/bash"         21 minutes ago      Up 21 minutes                           hungry_mccarthy

Docker 的默认网络,要了解有关默认网络的更多信息,请参阅此处

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
f83800356529        bridge              bridge              local
8169b2246500        host                host                local
b61e4f39c0ec        none                null                local

让我们使用以下方法找出容器 IP 地址docker inspect

$ docker inspect 2461f410228b | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.18.0.3",
                    "IPAddress": "172.18.0.3",


$ docker inspect 6da9d8196637 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.18.0.2",

默认情况下,在 BRIDGE 网络中启动的容器将能够访问在同一网络中启动的其他容器

root@2461f410228b:/# ping 172.18.0.2
PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.051 ms

当您正在寻找使用名称/别名到达另一个容器时,在文件 /etc/hosts 中添加目标容器信息以解析 DNS:

root@2461f410228b:/# cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.3      2461f410228b
172.18.0.2      docker2

现在尝试使用主机名到达目标容器:

root@2461f410228b:/# ping docker2
PING docker2 (172.18.0.2) 56(84) bytes of data.
64 bytes from docker2 (172.18.0.2): icmp_seq=1 ttl=64 time=0.077 ms

我相信这可能会有所帮助。

于 2018-01-21T10:09:07.490 回答