Возможно ли иметь порты доступа к контейнерам Docker, открытые хостом? Конкретно у меня есть MongoDB и RabbitMQ, работающие на хосте, и я хотел бы запустить процесс в контейнере Docker для прослушивания очереди и (необязательно) записи в базу данных.
Я знаю, что я могу перейти из контейнера на хост (через опцию -p), и у меня есть подключение к внешнему миру (то есть интернету) из контейнера Docker, но я бы не хотел раскрывать RabbitMQ и порты MongoDB от хоста до внешнего мира.
ИЗМЕНИТЬ: некоторые уточнения:
Starting Nmap 5.21 ( http://nmap.org ) at 2013-07-22 22:39 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00027s latency).
PORT STATE SERVICE
6311/tcp open unknown
[email protected] ~ % docker run -i -t base /bin/bash
[email protected]:/# apt-get install nmap
[email protected]:/# nmap 172.16.42.1 -p 6311 # IP found via docker inspect -> gateway
Starting Nmap 6.00 ( http://nmap.org ) at 2013-07-22 20:43 UTC
Nmap scan report for 172.16.42.1
Host is up (0.000060s latency).
PORT STATE SERVICE
6311/tcp filtered unknown
MAC Address: E2:69:9C:11:42:65 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 13.31 seconds
Мне пришлось сделать этот трюк, чтобы подключиться к контейнеру через интернет: Мой брандмауэр блокирует сетевые подключения из контейнера докера.
EDIT. В конце концов я пошел с созданием настраиваемого моста с помощью pipework и чтобы службы прослушивали мост IP. Я пошел с этим подходом, вместо того, чтобы MongoDB и RabbitMQ прослушивали мост докеров, потому что он дает большую гибкость.