Когда использовать --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>
Пожалуйста, смотрите
Это не прямой ответ, я просто хочу резюмировать то, что не сразу понятно.
Чтобы контейнеры разговаривали друг с другом,
- Создайте сеть не по умолчанию:
docker network create MyNetwork
- Подключите контейнеры к этой сети во время выполнения:
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