2015-12-09 3 views

ответ

3

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

Например, если у вас есть докер контейнер работает PostGreSQL дб:

$ docker run -d --name db training/postgres 

Вы можете установить ссылку на другой контейнер работает веб-приложения:

$ docker run -d --name web --link db training/webapp python app.py 

Контейнер работает ваш веб-приложение будет иметь набор переменных среды с портами, открытыми в контейнере db, например:

DB_PORT_5432_TCP_PORT=5432 

Переменные среды создаются на основе имени контейнера, в этом случае имя контейнера - db, поэтому переменная среды начинается с БД.

Вы можете найти более подробную информацию в Докер документации здесь:

https://docs.docker.com/v1.8/userguide/dockerlinks/

+1

Это дополнительно предоставляет переменные окружения. Есть ли способ избежать воздействия переменных среды? –

+0

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

+0

@ r.v Я думаю, вы можете обойти это, используя '--net' вместо привязки контейнера. – Thilo

1

я нашел альтернативу контейнерной компоновки: Вы можете определить пользовательские «сети» и сказать контейнер, чтобы использовать их с помощью опции --net.

Например, если ваши контейнеры предназначены для развертывания вместе как единое целое, все они могут иметь общий сетевой стек (с использованием --net container:oneOfThem). Таким образом, вам не нужно даже настраивать имена хостов, чтобы они находили друг друга, они могут просто делиться одним и тем же 127.0.0.1, и ничто не подвергается воздействию внешнего.

Конечно, таким образом они открывают все свои порты друг другу, и вы должны быть осторожны, чтобы не иметь конфликтов (они не могут оба запускать 8080, например). Если это вызывает беспокойство, вы все равно можете использовать --net, чтобы не разделить один и тот же сетевой стек, но настроить более сложную оверлейную сеть.

И, наконец, опция --net также может использоваться для запуска контейнера непосредственно в сети хоста.

Очень гибкий инструмент.

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