DNS сети Docker Bridge

У меня есть два контейнера, работающих в сети моста докеров по умолчанию. Демон назначает им «случайный» IP-адрес в определенном диапазоне.

network_mode: bridge -> 172.17.0.X

Как я могу связаться друг с другом через какой-то псевдоним или имя?


person Jumpa    schedule 21.01.2018    source источник


Ответы (1)


Возьмем следующие контейнеры, работающие с базовым образом 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

Я считаю, что это может помочь в некоторой степени.

person Here_2_learn    schedule 21.01.2018
comment
Моя конечная цель — подключить контейнер phpmyadmin к контейнеру mariadb, избегая ссылки в composer. Что я должен использовать в качестве DNS на входе сервера? - person Jumpa; 21.01.2018
comment
Не понял, что мне следует использовать в качестве DNS на входе сервера. Можете ли вы уточнить это? О каком сервере вы говорите? - person Here_2_learn; 22.01.2018