2016-06-30 2 views
1

/Я использую Docker бета на макинтош есть некоторые услуги, указанные в service-a/docker-compose.yml:хост Access машины DNS из Докер контейнера

version: '2' 
services: 
    service-a: 
    # ... 
    ports: 
     - '4000:80' 

Я тогда установить следующее /etc/hosts:

::1 service-a.here 
127.0.0.1 service-a.here 

и у меня есть сервер nginx, на котором работают прокси service-a.here, до localhost:4000. Так что на моем mac я могу просто запустить: curl http://service-a.here. Все это прекрасно работает.

Теперь я строй другой службы, service-b/docker-compose.yml:

version: '2' 
services: 
    service-b: 
    # ... 
    ports: 
     - '4001:80' 
    environment: 
     SERVICE_A_URL: service-a.here 

service-b потребность service-a пару вещей:

  1. Необходимо перенаправить пользователь в браузере к $SERVICE_A_URL
  2. Он должен выполнять HTTP-запросы до service-a, также используя $SERVICE_A_URL

С помощью этой настройки работает только перенаправление (1.). HTTP-запросы (2.) не работают, потому что контейнер service-b не имеет понятия service-a.here в его DNS.

Я попытался добавить service-a.here, используя конфигурационную переменную add_hosts, но я не болен, что ее установить. localhost не будет работать, конечно.

Отметьте, что я действительно хочу, чтобы файлы, составляющие докеры, были разделены (присоединение к ним не помогло бы решить мою проблему), потому что у них уже есть много служб, работающих внутри них.

Есть ли способ получить доступ к разрешению DNS на локальном хосте из контейнера докеров, так что, например, curl service-a.here будет работать изнутри контейнера?

ответ

0

Вы можете использовать инструкцию «link» в файле docker-compose.yml для автоматического разрешения адреса из вашего сервиса-контейнера.

service-b: 
    image: blabla 
    links: 
     - service-a:service-a 
service-a: 
    image: blablabla 

Теперь у вас есть строки в/и т.д./сонмы вам сервис-б сказал:

service-a 172.17.0.X 

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

+0

Это работает! Для одного файла 'docker-compose.yml'. Не для нескольких 'docker-compose.yml'. – romeovs

+0

Думаю, мне придется прибегнуть к «external_links»: / – romeovs

Смежные вопросы