Как подключить два контейнера докеров через локальный хост?

У меня есть две службы, работающие в отдельных контейнерах: одна — это grunt (приложение) и работает через порт 9000, а другая — Sails.js (сервер), которая работает через порт 1337. Я хочу попытаться подключиться к клиентскому приложению. сервер через localhost:1337. Возможно ли это? Спасибо.


person reconman    schedule 19.03.2015    source источник


Ответы (2)


ХОЗЯИН

Вы не сможете подключиться к другому контейнеру с помощью localhost (поскольку localhost является текущим контейнером), но вы можете подключиться через хост контейнера (хост, на котором запущен ваш контейнер). В вашем случае вам нужен IP-адрес виртуальной машины boot2docker (echo $(boot2docker ip)). Чтобы это работало, вам нужно открыть свой порт на уровне хоста (что вы делаете с -p 1337:1337).

ССЫЛКА НА САЙТ

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

Вам нужно добавить флаг --name в команду сервера docker run: --name sails_server

Вам нужно добавить флаг --link в команду приложения docker run: --link sails_server:sails_server

И внутри вашего приложения вы сможете получить доступ к серверу по адресу sail_server:1337. Вы также можете использовать переменные среды для получения IP-адреса сервера. См. документацию: https://docs.docker.com/userguide/dockerlinks/

БОНУС: DOCKER-COMPOSE

Ваши команды запуска могут быть немного длинными... в этом случае я предпочитаю использовать docker-compose, что позволяет мне определять мои контейнеры и их отношения (тома, имена, ссылки, команды...) в одном файле.

person Céline Aussourd    schedule 19.03.2015
comment
Ах, кк, парус_сервер — это переменная среды, или я просто получаю к ней доступ непосредственно в моем файле .js? - person reconman; 19.03.2015
comment
@reconman, когда вы связываете контейнеры, Docker обновляет файл /etc/hosts, чтобы вы могли напрямую использовать sails_server. - person Céline Aussourd; 19.03.2015
comment
Спасибо, это очень помогло - person reconman; 19.03.2015
comment
Я не удовлетворен. Неужели нет способа достичь первоначальной цели? - person Ben; 12.05.2015

Да, если вы используете параметр docker -p 1337:1337 в своей команде запуска docker, он выставит порт 1337 изнутри контейнера на ваш локальный хост: 1337

person Mitch Dart    schedule 19.03.2015
comment
Я пробовал это, я могу получить доступ к 1337 с IP-адреса хоста, но приложение не может подключиться к локальному хосту: 1337. Спасибо. - person reconman; 19.03.2015
comment
localhost внутри контейнера — это сам контейнер. Вместо этого вам нужно использовать IP-адрес хоста. Или вы можете просто использовать ссылки на докеры. - person Adrian Mouat; 19.03.2015
comment
вы используете докер внутри виртуальной машины? это тот случай, если вы используете Mac OSX или Windows, тогда он запускается внутри виртуальной машины с именем boot2docker - person Mitch Dart; 19.03.2015