Подтвердить что ты не робот

Как добраться до контейнеров-докеров по имени вместо IP-адреса?

Есть ли способ добраться до контейнеров докеров, используя имена вместо IP-адресов?

Я слышал о трубопроводе, и я видел некоторые параметры типа dns и hostname для докеров, но я все еще не могу собрать все вместе.

Спасибо за ваше время.

Я не уверен, что это полезно, но это то, что я сделал до сих пор:

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

Я добавил запись псевдонима DNS на свой DNS-сервер частной сети и соответствует имени машины, которое используется докере-машиной. Но при загрузке и подключении к сети аппарат всегда выбирает другой IP-адрес.

Я просто потерял информацию о том, где решить эту проблему:

  • сетевой DNS-сервер
  • имя хоста docker-machine
  • имя хоста контейнера docker
  • возможно, какая-то комбинация из них

Я, вероятно, ищу что-то похожее на этот вопрос:

Как разрешить докере использовать мой сетевой маршрутизатор для легкого назначения dhcp ip в контейнеры вместо того, чтобы конвейер?

Любое общее направление будет потрясающим... еще раз спасибо!

4b9b3361

Ответ 1

Если вы хотите использовать готовое решение, вы можете, например, проверить Kontena. Он поставляется с технологией сетевого оверлея от Weave, и эта технология используется для создания виртуальных частных сетей LAN между службами. Благодаря этому каждый сервис/контейнер может быть достигнут с помощью service_name.kontena.local.

Ответ 2

Docker 1.10 имеет встроенный DNS. Если ваши контейнеры подключены к одной и той же сети, определенной пользователем (создайте сеть docker network create my-network и запустите свой контейнер с помощью --net my-network), они могут ссылаться друг на друга, используя имя контейнера. (Docs).

Круто!

Одно предупреждение, если вы используете Docker, вы знаете, что он добавляет префикс к вашим именам контейнеров, т.е. <project name>_<service name>-#. Это делает ваши имена контейнеров несколько более сложными для контроля, но это может быть хорошо для вашего варианта использования. Вы можете переопределить docker, создать функцию именования, вручную задав имя контейнера в вашем шаблоне компоновки, но тогда вы не сможете масштабировать с составлением.

Ответ 3

Предполагая, что вы хотите добраться до контейнера mysql из контейнера web вашего файла docker-compose.yml, например:

web:
  build: .
  links:
    - mysql

mysqlservice:
  image: mysql

Вам будет приятно узнать, что Docker Compose уже добавляет доменное имя mysqlservice (в контейнере web /etc/hosts), указывающее на контейнер mysql.

Вместо поиска IP-адреса контейнера mysql вы можете просто использовать доменное имя mysqlservice.

Если вы хотите добавить пользовательские имена доменов, это также возможно с параметром extra_hosts.

Ответ 5

Создайте новую мостовую сеть, отличную от docker0, запустите в ней свои контейнеры, и вы можете ссылаться на контейнеры внутри этой сети по их именам.

Демон Docker запускает встроенный DNS-сервер для обеспечения автоматического обслуживания обнаружение для контейнеров, подключенных к пользовательским сетям. имя запросы разрешения из контейнеров обрабатываются сначала встроенный DNS-сервер.

Попробуйте следующее:

docker network create <network name>
docker run --net <network name> --name test busybox nc -l 0.0.0.0:7000
docker run --net <network name> busybox ping test

Сначала мы создаем новую сеть. Затем мы запускаем контейнер busybox с именем test, прослушивающий порт 7000 (просто чтобы он работал). Наконец, мы проверяем тестовый контейнер по его названию, и он должен работать.

Ответ 6

Я изменил параметр --net с помощью параметра --network и работает как ожидалось:

docker network create <network name>
docker run --network <network name> --name <container name> <other container options>
docker run --network <network name> --name <container name> <other container options>