Как получить доступ к контейнеру docker через имя хоста? (С моего хоста p c) - PullRequest
0 голосов
/ 05 мая 2020

(я делаю это просто для практики, чтобы знать docker.)

Мой хост P C равен ubuntu 18.04 LTS.
И это мой файл docker-compose (по умолчанию сетевой режим - мост).

version: "2"
services:
  zookeeper1:
    image: wurstmeister/zookeeper
  zookeeper2:
    image: wurstmeister/zookeeper
  zookeeper3:
    image: wurstmeister/zookeeper

В контейнере docker они могут найти друг друга.

> docker container exec -it 8b1c2b412989 ping zookeeper2
PING zookeeper2 (172.19.0.3) 56(84) bytes of data.
64 bytes from setup-zookeeper-kafka_zookeeper2_1.setup-zookeeper-kafka_default (172.19.0.3): icmp_seq=1 ttl=64 time=0.097 ms
64 bytes from setup-zookeeper-kafka_zookeeper2_1.setup-zookeeper-kafka_default (172.19.0.3): icmp_seq=2 ttl=64 time=0.129 ms

Но когда я попытался подключиться к своему хосту P C, он не работает

> ping zookeeper2
ping: zookeeper2: Name or service not known

> ping 8b1c2b412989 # container id also doesn't work
ping: 8b1c2b412989: Name or service not known

Пинг с ip, он работает хорошо.

> ping 172.19.0.3
PING 172.19.0.3 (172.19.0.3) 56(84) bytes of data.
64 bytes from 172.19.0.3: icmp_seq=1 ttl=64 time=0.142 ms
64 bytes from 172.19.0.3: icmp_seq=2 ttl=64 time=0.046 ms

Я добавил свойство hostname, оно все равно не работает.

version: "2"
services:
  zookeeper1:
    hostname: zookeeper1
    image: wurstmeister/zookeeper
  zookeeper2:
    hostname: zookeeper2
    image: wurstmeister/zookeeper
  zookeeper3:
    hostname: zookeeper3
    image: wurstmeister/zookeeper

Как я могу получить доступ к контейнеру с именем хоста с моего хоста P C?
Теперь я могу работать только с параметрами ports (или мне нужно написать stati c IP адрес)

Что я не так думаю?

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Это происходит, как прокомментировал Гига. Если у вас нет имени хоста в вашем / etc / hosts, здесь нет magi c.

Если вам нужно выполнить пинг для проверки работоспособности, вы можете использовать docker -compose . Таким образом, с его помощью вы всегда можете проверить своих смотрителей зоопарка, живы они или нет.

Если вы настаиваете на том, что вам нужно выполнить эхо-запрос с именем хоста, я рекомендую засучить рукава и создать сценарий bash в формате docker, например ...

docker ps --format "table {{.ID}}\t{{.Ports}}" 

И затем с каждым идентификатором контейнера с именем контейнера выполните:

docker inspect <containerid> and extract the IP like you have [here.][2]
1 голос
/ 05 мая 2020

Docker не обновляет файл вашего хоста / etc / hosts автоматически, поэтому вы не можете получить доступ с хост-машины через имя хоста. Вы можете вручную написать оболочку для docker -compose, которая обновит файл / etc / hosts на хост-машине. Но другой вопрос, зачем вам это нужно.

...