Como expor o ip e a porta do contêiner do docker ao host do docker externo sem mapeamento de porta?

Quando eu iniciei dois contêineres docker para uma mesma imagem da web em um host docker.

  • dois contêineres docker escutaram na mesma porta 5000
  • a porta 5000 dos dois contêineres foi mapeada para diferentes portas do host do docker: 49155, 49156
  • para acessar os dois contêineres do host do docker externo precisam estar acessando o ip do host do docker e a porta 49155 ou 49156

Existe uma solução para acessar um contêiner docker do host do docker externo por seu ip e porta, xxxx: 5000, sem mapeamento de porta?

Todos os contêineres docker em diferentes hosts dock podem acessar um ao outro diretamente.

Você pode fazer isso com aliasing de IP no host.

Primeiro, adicione uma interface virtual no host que tenha um endereço IP diferente da interface principal. Vamos chamar a interface primária eth0 com o IP 10.0.0.10 e a interface virtual eth0:1 com o endereço IP 10.0.0.11 .

  ifconfig eth0:1 10.0.0.11 netmask 255.255.255.0 up 

Agora, execute os contêineres e mapeie a porta 5000 para a interface correspondente. Por exemplo:

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

Agora você pode acessar cada contêiner na porta 5000 usando diferentes endereços IP externamente.

Ao criar uma VM, certifique-se de que os itens a seguir estejam selecionados em rede

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

RHEL 6.5 / Fedora 20

 Install docker, libvrt 

Certifique-se de que o seguinte seja feito usando raiz

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

Crie o arquivo ifcfg-xxxxx em / etc / sysconfig / network-scripts

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

e append a ifcfg-p2p1 / ifcfg-eth0 no final do arquivo BRIDGE=xxxx

Reinicie a VM

corre

 brctl show 

para garantir que a ponte conectada tenha um adaptador p2p1 ou eth0 por exemplo

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

Agora, antes de iniciar o docker, temos que usar nossa ponte e não o docker0 para fazer isso, executar o docker como docker -d -b=gsbr01

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

Verifique o resultado:

 # 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 
Intereting Posts