Docker run --name vs --hostname разница в качестве параметра командной строки (ping: неверный адрес) - PullRequest
0 голосов
/ 24 декабря 2018

1.В чем разница между --name и --hostname в команде Docker run?

2.Почему foo не может достичь bar с помощью hostname = barhost?

создать сеть и подключить к ней два контейнера:

docker network create test
docker run --rm -dit --name bar --network test --hostname barhost alpine:latest
docker run --rm -it --name foo --network test --hostname foohost alpine:latest

ping barhost из foo терминала

ping -c2 barhost

дает результат:

неверный адрес 'barhost'

но ping bar из foo

ping -c2 bar

успешно:

Панель PING (172.31.0.2): 56 байтов данных 64 байта из 172.31.0.2: seq = 0 ttl = 64 время = 0,260 мс 64 байта из 172.31.0.2: seq =1 ttl = 64 время = 0,155 мс

--- статистика пинговой полосы --- 2 переданных пакета, 2 полученных пакета, 0% потерь пакетов

3.Ifвы не можете достичь bar его hostname с foo, почему это можно сделать из bar?

# assuming you've created network test from point 2.
docker run --rm -it --name bar --network test --hostname barhost alpine:latest

ping barhost с bar терминал

ping -c2 barhost

успешно завершен:

PING barhost (172.31.0.2): 56 байтов данных64 байта из 172.31.0.2: seq = 0 ttl = 64 времени = 0,135 мс 64 байта из 172.31.0.2: seq = 1 ttl = 64 времени = 0,127 мс

--- статистика пинга barhost --- 2передано пакетов, получено 2 пакета, потеря пакета 0%

1 Ответ

0 голосов
/ 24 декабря 2018

1.В чем разница между --name и --hostname в команде запуска docker?

Ответ: Когда мы используем docker run команду dockerсоздает контейнер и присваивает ему идентификатор контейнера типа UUID.Теперь этот идентификатор контейнера можно использовать для ссылки на созданный контейнер.Но запомнить этот идентификатор контейнера может быть сложно.

Так что мы можем использовать --name в команде запуска Docker.Теперь вы можете использовать идентификатор контейнера для ссылки на созданный контейнер или использовать имя контейнера для него.

Аналогично, при создании контейнера Docker имя хоста по умолчанию будет идентификатором контейнера в Docker.Вы можете переопределить имя хоста, используя --hostname.Я взял это из Docker docs .

Теперь рассмотрим сценарий, в котором вы используете докер-контейнеры через код и хотите сослаться на docker.Поскольку docke rid создается во время создания, вы не можете знать его заранее, поэтому можете использовать --name.Чтобы узнать, когда использовать --hostname в проге docker, читать из это сообщение о стеке потока

2. Почему foo не может достичь бара по имени хоста = barhost?

Ответ: Как указано в вышеупомянутом сообщении stackoverflow , --hostname буквально не меняет имя хоста для контейнера Docker таким образом, чтобы его можно было использовать для доступа к немуснаружи.Этот вариант использования аналогичен тому, почему вы хотите использовать флаг --name, если вы ожидаете определенное значение, которое в противном случае генерируется во время создания контейнера.

3.Если вы можете 't достичь бара по имени хоста из foo, почему это можно сделать из бара?

Ответ: Ответ на этот вопрос уже должен быть ясен.Внутри контейнера имя хоста, упомянутое с помощью --hostname, существует, но вне контейнера это не так.

...