Когда использовать --hostname в докере?

Является --hostname как система доменных имен в среде контейнера Docker, которая может заменить --ip при обращении к другому контейнеру?

4 ответа

Решение

--hostname flag только изменяет имя хоста внутри вашего контейнера. Это может понадобиться, если ваше приложение ожидает определенного значения для имени хоста. Он не изменяет DNS вне докера и не меняет сетевую изоляцию, поэтому не позволяет другим подключаться к контейнеру с таким именем.

Вы можете использовать имя контейнера или его идентификатор (короткий, 12 символов), чтобы соединиться с контейнером с контейнером со встроенным dns докера, если у вас есть оба контейнера в одной сети, и эта сеть не является мостом по умолчанию.

--hostname это параметр, который может быть дан вместе с docker run команда, которая установит указанное имя в качестве имени хоста контейнера, тогда как --ip это параметр для установки определенного IP-адреса (ipv4) для этого конкретного контейнера.

docker run --hostname test --ip 10.1.2.3 ubuntu:14.04 

Следующая команда создаст док-контейнер с базовым образом как ubuntu-14.04 с именем хоста в качестве теста и IP-адресом контейнера как 10.1.2.3

Для тех, кто когда-либо должен изменить имя хоста так, чтобы другие контейнеры из той же сети увидели, что он просто использует --net-alias=${MY_NEW_DNS_NAME}

Например

docker run -d --net-alias=${MY_NEW_DNS_NAME} --net=my-test-env --name=my-docker-name-test <dokcer-contanier>

Пожалуйста, смотрите

Это не прямой ответ, я просто хочу резюмировать то, что не сразу понятно.

Чтобы контейнеры разговаривали друг с другом,

  1. Создайте сеть не по умолчанию:

docker network create MyNetwork

  1. Подключите контейнеры к этой сети во время выполнения:

docker run --network MyNetwork --name Container1 Image1

docker run --network MyNetwork --name Container2 Image2

Теперь, если это, например, веб-сервер, работающий на порту 80, процессы внутри Container2 сможет разрешить это, используя имя хоста Container1 и порт 80

Далее, если Container1 настроен так:

docker run --network MyNetwork --name Container1 -p 8080:80 Image1

потом

  • Контейнер1 может видеть Контейнер2:80
  • Хост может видеть 127.0.0.1:8080

Это обобщено здесь https://jaaq.medium.com/making-docker-containers-talk-to-each-other-by-hostname-using-container-networking-94835a6f6a5b

Вы также можете подтвердить, что контейнеры подключены, и проверить их внутренние IP-адреса, используя это:

docker network inspect MyNetwork

Другие вопросы по тегам