Como usar DNS em containers Docker

Neste artigos iremos falar sobre como usar o DNS em containers Docker:

É importante que você tenho visto os conteúdos sobre Redes Docker pra dar sequência na leitura deste artigo.

Sabemos da importância de ter um servidor DNS em nossa infraestrutura.

Quando iniciamos um container e não definimos uma rede, automaticamente ele é associado a rede padrão chamada bridge.

Entretanto está rede não possui um servidor DNS, consequentemente a comunicação poderá ser feita somente via IP.

Vamos testar:

 

1) Vamos criar dois containers:

docker container run -d --name webhost1 nginx:alpine
docker container run -d --name webhost2 nginx:alpine

2) Vamos conectar no terminal do container e fazer um teste de ping:

docker container exec -it webhost1 sh
/ # ping webhost1
ping: bad address 'webhost1'
/ # ping webhost2
ping: bad address 'webhost2'
/ #

O teste de ping não funcionou.

3) Para ativar a comunicação por nome, devemos utiliza o parâmetro —link ao iniciar o container:

Então parar e remover esses containers e cria-los novamente agora fazendo um link entre eles.

docker container rm -f webhost1 webhost2
docker container run -d --name webhost1 nginx:alpine
docker container run -d --name webhost2 --link webhost1 nginx:alpine

Desta forma o container webhost2 consegue se comunicar com o webhost1 via DNS:

docker container exec -it webhost2 ping webhost1
PING webhost1 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.198 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.208 ms
64 bytes from 172.17.0.2: seq=2 ttl=64 time=0.146 ms

Porém do webhost1 para webhost2 isso não funciona:

docker container exec -it webhost1 ping webhost2
ping: bad address 'webhost2'

Para que todos os containers possam se comunicar via DNS você deve associa-los a uma rede diferente da padrão.

4) Então vamos criar uma rede e os containers associados:

docker container rm -f webhost1 webhost2
docker network create -d bridge network_web
docker container run -d --name webhost1 --network network_web nginx:alpine
docker container run -d --name webhost2 --network network_web nginx:alpine

 Vamos testar o ping via DNS:

docker container exec -it webhost1 ping webhost2
PING webhost02 (172.19.0.3): 56 data bytes
64 bytes from 172.19.0.3: seq=0 ttl=64 time=1.615 ms
64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.124 ms
64 bytes from 172.19.0.3: seq=2 ttl=64 time=0.213 ms
docker container exec -it webhost2 ping webhost1
PING webhost01 (172.19.0.2): 56 data bytes
64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.193 ms
64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.158 ms
64 bytes from 172.19.0.2: seq=2 ttl=64 time=0.162 ms

Agora já sabemos como funciona a comunicação via DNS entre containers.

Espero que tenham gostado e até a próxima!

 

Gostou do nosso artigo sobre Como usar DNS em containers Docker? Compartilhe!

Deixe uma resposta