У меня есть две службы, работающие в отдельных контейнерах: одна — это grunt (приложение) и работает через порт 9000, а другая — Sails.js (сервер), которая работает через порт 1337. Я хочу попытаться подключиться к клиентскому приложению. сервер через localhost:1337. Возможно ли это? Спасибо.
Как подключить два контейнера докеров через локальный хост?
Ответы (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, что позволяет мне определять мои контейнеры и их отношения (тома, имена, ссылки, команды...) в одном файле.
/etc/hosts
, чтобы вы могли напрямую использовать sails_server
.
- person Céline Aussourd; 19.03.2015
Да, если вы используете параметр docker -p 1337:1337 в своей команде запуска docker, он выставит порт 1337 изнутри контейнера на ваш локальный хост: 1337