Как добраться до контейнеров docker по имени вместо IP-адреса?
есть ли способ связаться с контейнерами docker, используя имена вместо ip-адресов?
Я слышал о pipework, и я видел некоторые параметры типа dns и имени хоста для docker, но я все еще не могу собрать все вместе.
Спасибо за ваше время.
Я не уверен, если это полезно, но это то, что я сделал до сих пор:
- установленный узел контейнера docker с помощью docker-machine и vmwarevsphere водитель!--10-->
- запустил все службы с docker-compose
- Я могу связаться со всеми службами с любой другой машины в сети, используя IP и порт
Я добавил запись псевдонима DNS на мой частный сетевой DNS-сервер, и она соответствует имени машины, которая используется docker-machine. Но машина всегда выбирает другой IP-адрес при загрузке и подключении к сети.
Я просто потерял, где решать это:
- сетевой DNS-сервер
- docker-имя хоста машины
- имя хоста контейнера docker
- вероятно, какая-то комбинация всех них
Я, вероятно, ищу что-то похожее на этот вопрос:
любое общее направление будет удивительным...еще раз спасибо!
6 ответов
настройки 1.10
имеет встроенный DNS. Если ваши контейнеры подключены к тому же пользовательские сеть (создать сеть docker network create my-network
и запустите контейнер с --net my-network
) они могут ссылаться друг на друга, используя имя контейнера. (Docs).
круто!
одно предостережение если вы используете Docker compose, вы знаете, что он добавляет префикс к именам контейнеров, т. е. <project name>_<service name>-#
. Это делает ваши имена контейнеров несколько более трудными для управления, но это может быть нормально для вашего случая. Ты можешь!--13-->переопределите функциональность именования docker compose, вручную установив имя контейнера в шаблоне compose, но тогда вы не сможете масштабироваться с compose.
вы можете попробовать dnsdock. Смотрит прямо вперед и легко(!) для настройки. Взгляните на http://blog.brunopaz.net/easy-discover-your-docker-containers-with-dnsdock/ и https://github.com/tonistiigi/dnsdock .
EDIT 2018-02-17: Docker может в конечном итоге удалить links
ключ от docker-compose, поэтому они предлагают использовать пользовательские сети как указано здесь =>https://docs.docker.com/compose/compose-file/#links
предполагая, что вы хотите достичь mysql
контейнера web
контейнер из ваших , например:
web:
build: .
links:
- mysql
mysqlservice:
image: mysql
вы будете рады узнать, что Docker Compose уже добавляет mysqlservice
домен имя (в web
контейнер /etc/hosts
), который указывает на mysql
контейнер.
вместо того, чтобы искать mysql
IP-адрес контейнера, вы можете просто использовать mysqlservice
доменное имя.
если вы хотите добавить пользовательские доменные имена, это также возможно с extra_hosts
Если вы хотите из решения коробки, вы можете проверить, например Контена. Он поставляется с технологией сетевого наложения от плетение и эта технология используется для создания виртуальных частных сетей между службами. Благодаря этому каждый сервис / контейнер может быть достигнут service_name.kontena.local
.
создайте новую мостовую сеть, отличную от 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 с именем тест прослушивание порта 7000 (просто чтобы он работал). Наконец, мы пингуем тестовый контейнер по его имени, и он должен работать.
Я изменил с --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>