4
respostas

Acessar Docker Network pelo Host via IPs ou Hostnames

Bom dia!

Estou utilizando Docker For Windows e conforme a aula de redes, criei uma rede personalizada em modo bridge, onde levantei dois containers. Ambos estão se comunicando perfeitamente internamente (testei o ping de um para outro), porém, se eu tentar acessar eles pelo navegador pelo ip (Ex.: http://172.18.0.3:8080/) não consigo. Só funciona utilizando o localhost:8080.

Meu objetivo final seria acessar os containers pelo navegador através dos hostnames siteum.dev, sitedois.dev, etc.

Poderia me dar um direcionamento? :)

4 respostas

Olá,

Acredito que você conseguirá resolver esse problema utilizando o DNS Proxy Server que pode ser encontrado nesse link: https://github.com/mageddo/dns-proxy-server

É um servidor DNS que traduz os endereços IP dos containers para hostnames.

Oi Rafael, obrigado!

Subi um container com este cara, mas não consegui identificar na documentação como configura-lo no Windows. Tentei um outro cara chamado devdns, configurei tudo conforme a documentação mas nenhum deles tive sucesso em acessar sitetal.dev no navegador.

Olá Caio,

No caso do DNS Proxy Server acredito que só funcione no Linux, você precisaria fazer o seguinte, o primeiro passo seria executar esse comando para baixar a imagem DNS Proxy Server para rodar em um container:

docker run --hostname dns.mageddo --name dns-proxy-server -p 5380:5380 \
-v /opt/dns-proxy-server/conf:/app/conf \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/resolv.conf:/etc/resolv.conf \
defreitas/dns-proxy-server

Deixe esse terminal aberto.

Feito, isso você pode ir para o docker-compose e configurar a chave hostname para colocar o hostname desejado. Segue um exemplo do projeto do curso do Kubernetes colocando hostname siteum.dev:

version: "3.0"
services:
  db:
    image: mysql
    environment:
      - MYSQL_DATABASE=loja
      - MYSQL_USER=root
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
    volumes:
      - /home/rafael/volume:/var/lib/mysql

  web:
    image: rafanercessian/aplicacao-loja:v1
    hostname: siteum.dev
    ports:
      - 8080:80
    depends_on:
      - db

Abra um novo terminal, tente rodar esse arquivo bastando colocar o comando docker-compose up -d e depois vá até o browser e coloque siteum.dev. Fiz um teste por aqui e funcionou.

Obs: Depois do teste, pode pare o container do servidor DNS com docker stop [id do container]. Caso a conexão com a internet não seja restabelecida, tente reiniciar a máquina

Abs

Bom dia Rafael! Muito obrigado pelas dicas. No Windows realmente este caminho não parece dar certo. Vou tentar algo semelhante ou abortar a missão pelo menos até ter um ambiente linux disponível para isso. Abs.