Comment exposer l’ip et le port du conteneur docker à un hôte docker extérieur sans mappage de port?

Lorsque j’ai démarré deux conteneurs Docker pour une même image Web sur un hôte Docker.

  • deux conteneurs Docker écoutés sur le même port 5000
  • le port 5000 des deux conteneurs a été mappé sur différents ports de l’hôte docker: 49155, 49156
  • pour accéder aux deux conteneurs de l’extérieur de l’hôte docker doit être en accédant à l’IP hôte docker et le port 49155 ou 49156

Existe-t-il une solution pour accéder à un conteneur Docker depuis un hôte Docker externe par son adresse IP et son port, xxxx: 5000, sans mappage de port?

Tous les conteneurs de docker situés sur des hôtes Dock différents peuvent s’accéder directement.

Vous pouvez accomplir cela avec l’aliasing IP sur l’hôte.

Tout d’abord, ajoutez une interface virtuelle sur l’hôte qui a une adresse IP différente de celle de l’interface principale. Nous appellerons l’interface principale eth0 avec IP 10.0.0.10 et l’interface virtuelle eth0:1 avec l’adresse IP 10.0.0.11 .

  ifconfig eth0:1 10.0.0.11 netmask 255.255.255.0 up 

Exécutez maintenant les conteneurs et mappez le port 5000 sur l’interface correspondante. Par exemple:

 docker run -p 10.0.0.10:5000:5000 -name container1   docker run -p 10.0.0.11:5000:5000 -name container2   

Maintenant, vous pouvez accéder à chaque conteneur sur le port 5000 en utilisant différentes adresses IP en externe.

Lors de la création d’une machine virtuelle, assurez-vous que les éléments suivants sont sélectionnés dans le réseau

 Attached to: Bridged NetworkManager Adapter Type: PCnet-Fast III (Am 79C973) Promiscious Mode Allow All 

RHEL 6.5 / Fedora 20

 Install docker, libvrt 

Assurez-vous que les opérations suivantes sont effectuées avec root

 # chkconfig NetworkManager off # chkconfig network on # service NetworkManager stop # service network start 

Créez le fichier ifcfg-xxxxx dans / etc / sysconfig / network-scripts

 DEVICE=xxxxx TYPE=Bridge BOOTPROTO=dhcp ONBOOT=yes DELAY=0 

et append à ifcfg-p2p1 / ifcfg-eth0 à la fin du fichier BRIDGE=xxxx

Redémarrer la VM

courir

 brctl show 

pour vous assurer que le pont connecté a un adaptateur p2p1 ou eth0 par exemple

 # brctl show bridge name bridge id STP enabled interfaces gsbr01 8000.080027595649 no eth0 virbr0 8000.5254004c1564 yes virbr0-nic 

maintenant, avant de démarrer docker, nous devons utiliser notre pont et non docker0 pour cela, lancez docker en tant que docker -d -b=gsbr01

 $ echo 'DOCKER_OPTS="-b=gsbr01"' >> /etc/sysconfig/docker $ sudo service docker start 

Vérifiez le résultat:

 # brctl show bridge name bridge id STP enabled interfaces gsbr01 8000.080027595649 no eth0 veth5806f27 vethb3e33da virbr0 8000.5254004c1564 yes virbr0-nic docker -d -b=gsbr01