2017-02-22 39 views
0

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

$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' parentserver 
>>>172.17.0.3 

Мой вопрос, если кто-то, скажем, git clone мое хранилище на локальном компьютере и запустить docker-compose, это гарантируется, что IP из parentserver будет 172.17.0.3 на своей машине, а?

Причина, по которой я спрашиваю, у меня есть микросервисы, которые разговаривают друг с другом через HTTP, и в настоящее время у меня есть жесткие коды IP-адресов внутри моей логики приложений.

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

ответ

1

Контейнеры-докеры, созданные через docker-compose, по умолчанию помещаются в общую сеть и подключены к встроенному DNS-серверу. Это означает, что они равны linked. Контейнер «A», связанный с контейнером «B», может поместить контейнер «B» по его назначенному имени ссылки, по умолчанию, имени контейнера.

Возьмем в качестве примера мой Nginx конфигурации:

version: '2' 

services: 
    # ... more config 

    nginx: 
    environment: 
     API_DOMAIN:  api.mysite.com 
     FRONT_DOMAIN: 'mysite.com www.mysite.com' 
     ERRBIT_DOMAIN: errbit.mysite.com 
     ERRBIT_HOST: http://errbit:8080 
     PGADMIN_DOMAIN: pgadmin.mysite.com 
     PGADMIN_HOST: http://pgadmin:5050 

    errbit: 
    env_file: ./production/errbit.env 

Я сделал Nginx изображение, которое принимает домены через окружение вары, и хозяева имена других контейнеров работают в одной и той же Docker хоста создается с помощью этот конфиг.

https://docs.docker.com/engine/userguide/networking/

+0

круто, так что я могу просто заменить все мои жёстко прописанные запросы HTTP к 172.17.0.3 с фактическим именем контейнера для этой службы? – david

+0

Правильно. Сделайте быстрый тест ping. – nicooga