docker run --name vs --hostname разница в качестве параметра командной строки (ping: неправильный адрес)

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

пинг barhost с foo терминала

ping -c2 barhost

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

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

но пинг bar от foo

ping -c2 bar

успешно:

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

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

3.Если вы не можете связаться с 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 time = 0,135 мс 64 байта из 172.31.0.2: seq = 1 ttl = 64 time = 0,127 мс

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


person Jimmix    schedule 23.12.2018    source источник


Ответы (1)


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

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

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

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

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

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

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

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

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

person Yug Singh    schedule 23.12.2018