Dando um contêiner docker um endereço ip roteável

Eu estou executando isso no Ubuntu 14.04 e defini docker0 para um ip estático que é então roteado para a partir do ip público através do firewall. Eu estou tentando configurar minha API de back-end para executar em um contêiner docker e estou confuso por algumas coisas.

1.) Como eu docker0 o ip do docker0 para o ip do container, de forma que o docker0 saberia enviar os pacotes de input para o container (dinamicamente, se possível).

2.) Se ainda não foi feito dessa forma, como eu poderia fazer isso para que eu não precise configurá-lo toda vez que eu fizer uma nova execução desse contêiner docker?

Desde já, obrigado!

Eu suponho que você quer ter um IP atribuído ao seu contêiner docker fora da janela de encaixe.

Primeiro, crie um novo IP e atribua-o à interface do seu host (assumimos que sua interface é chamada de eth0.

 $> ip addr add 10.0.0.99/8 dev eth0 

Agora, quando você acionar o contêiner, especifique esse endereço e vincule-o ao seu contêiner docker:

 $> docker run -i -t --rm -p 10.0.0.99:80:8080 base 

O argumento -p fará com que o docker crie uma regra de NAT de iptables, a qual conterá todo o tráfego correspondente ao destino 10.0.0.99:80 ao contêiner do docker na porta 8080.

Se você precisar automatizar o processo e dimensioná-lo, consulte este recurso: https://github.com/jpetazzo/pipework

A documentação do docker é um bom começo: https://docker.github.io/engine/userguide/networking/

Recentemente, tive o mesmo problema e resolvi-o usando contêineres de rede :

  • Iniciar meu contêiner ‘serviço’ que desejo estar disponível no IP público
  • Crie um novo contêiner de ‘rede’ que esteja vinculado ao contêiner de serviço e faça o roteamento para as portas expostas pelo contêiner de serviço. Esse contêiner terá uma interface de rede extra vinculada ao host para que ele possa adquirir um IP do DHCP.
  • Crie uma ponte de rede do host do Docker para o container usando o Pipework do jpetazzo ( https://github.com/jpetazzo/pipework )
  • O contêiner de rede adquire um endereço do DHCP.

A partir deste ponto, o contêiner de rede está disponível na rede e encaminha as portas para o contêiner de serviço. A principal vantagem é que o contêiner ‘service’ não precisa saber sobre o IP público, DHCP, etc. Desta forma, todos os contêineres em execução podem ser tornados públicos na rede.

Por conveniência, criei um script que faz tudo isso de uma só vez. Disponibilizar um contêiner em execução em um IP público é tão simples quanto:

 create-network-container.sh webserver ens32 

Nesse caso, você precisaria ter um contêiner em execução chamado ‘webserver’ e uma interface de rede no host ‘ens32’. A interface é necessária para criar a ponte no contêiner de rede.

O script, informações e exemplos mais detalhados estão disponíveis em: https://github.com/jeroenpeeters/docker-network-containers

    Intereting Posts