У меня есть два контейнера, работающих в сети моста докеров по умолчанию. Демон назначает им «случайный» IP-адрес в определенном диапазоне.
network_mode: bridge -> 172.17.0.X
Как я могу связаться друг с другом через какой-то псевдоним или имя?
У меня есть два контейнера, работающих в сети моста докеров по умолчанию. Демон назначает им «случайный» IP-адрес в определенном диапазоне.
network_mode: bridge -> 172.17.0.X
Как я могу связаться друг с другом через какой-то псевдоним или имя?
Возьмем следующие контейнеры, работающие с базовым образом 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
Я считаю, что это может помочь в некоторой степени.