Est-il possible de faire en sorte qu'un conteneur Docker accède aux ports ouverts par l'hôte ? Concrètement, MongoDB et RabbitMQ fonctionnent sur l'hôte et j'aimerais exécuter un processus dans un conteneur Docker pour écouter la file d'attente et (éventuellement) écrire dans la base de données.
Je sais que je peux transférer un port du conteneur vers l'hôte (via l'option -p) et établir une connexion avec le monde extérieur (c'est-à-dire Internet) à partir du conteneur Docker, mais j'aimerais ne pas exposer les ports RabbitMQ et MongoDB de l'hôte au monde extérieur.
EDIT : quelques précisions :
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
joelkuiper@vps20528 ~ % docker run -i -t base /bin/bash
root@f043b4b235a7:/# apt-get install nmap
root@f043b4b235a7:/# 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
J'ai dû faire cette astuce pour obtenir une connexion internet à l'intérieur du conteneur : Mon pare-feu bloque les connexions réseau du conteneur Docker vers l'extérieur.
EDIT : Finalement, j'ai opté pour la création d'un pont personnalisé à l'aide de tuyauterie et que les services écoutent sur les IP du pont. J'ai choisi cette approche plutôt que de faire écouter MongoDB et RabbitMQ sur le pont docker, car elle offre plus de flexibilité.