
Tenho tentado configurar o nome de domínio dentro de um contêiner e verificar como o DNS do Docker incorporado lida com essas configurações. Mas fiquei surpreso ao ver que só recebi um nome de domínio truncado ao fazer uma pesquisa reversa de ns.
Eu configurei o fqdn para ser assim ldec<i>.n18.org
O comando hostname --fqdn
dentro do contêiner me retornou ldec1.n18.org
conforme o esperado, o ping ping ldec1.n18.org
está funcionando conforme o esperado com o fqdn devidamente resolvido.
Mas se eu fizer uma pesquisa reversa de ns como dig -x <container_ip>
, sempre recebo um nome de domínio truncado como ldec3.n18
em vez de ldec3.n18.org
.
root@ldec3:/# dig -x 172.18.0.4
; <<>> DiG 9.16.37-Debian <<>> -x 172.18.0.4
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21081
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;4.0.18.172.in-addr.arpa. IN PTR
;; ANSWER SECTION:
4.0.18.172.in-addr.arpa. 600 IN PTR ldec3.n18.
;; Query time: 0 msec
;; SERVER: 127.0.0.11#53(127.0.0.11)
;; WHEN: Mon Apr 17 18:59:38 UTC 2023
;; MSG SIZE rcvd: 87
Então, por que dig me retorna um nome de domínio truncado?
Para construir a imagem
docker build --tag=debian:11-lde - <<EOF
FROM debian:11
ARG DEBIAN_FRONTEND=noninteractive
ENV APT_CMD="apt-get install -y --no-install-recommends"
# SHELL ["/bin/bash", "-x", "-c"]
RUN echo "===> Add tools..." \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
iputils-ping bind9-dnsutils lsof \
openssh-* \
wget curl \
iptables whois iproute2 net-tools \
vim less sudo bash-completion patch \
ca-certificates \
&& apt-get autoremove -y \
&& echo OK
EOF
Para iniciar os 3 containers na mesma rede
docker network create --driver=bridge n18 --subnet=172.18.0.0/24 || true
for i in $(seq 1 1 3)
do
docker rm -f "ldec${i}" || true
declare domain="n18.org"
docker run --interactive --tty --detach --rm --name "ldec${i}" \
--network=n18 --hostname="ldec${i}.${domain}" \
--dns="8.8.8.8" \
debian:11-lde
done
Responder1
Para responder minha própria pergunta, testei com Podman V3 junto com o plugin dnsname e com dnsmasq no host e finalmente consegui o que esperava
...
;; QUESTION SECTION:
;4.0.5.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
4.0.5.192.in-addr.arpa. 0 IN PTR ldec3.newnet.podman.
...
Portanto, parece que o DNS interno do Docker tem uma maneira muito específica/opinativa de responder a solicitações de DNS reverso e se você precisar de um comportamento de DNS mais convencional, para testar suas funções ansible que lidam com configurações de rede, etc..., talvez seja melhor usar o Podman V3 ou tentando desviar o DNS interno do Docker e usar algo como dnsmasq ou bind9.
Verifique também este tópico relacionado no SO que explica:como-posso-dar-docker-containers-acesso-a-dnsmasq-local-dns-resolver-on-the-h.
EDITAR2:DNS incorporado do Docker
Consultas reversas de DNS em hosts dentro de redes personalizadas são 'peculiares' e o Docker não permite desativar o DNS incorporado (remonta a 2017):
- https://github.com/moby/moby/issues/26298#issuecomment-339126461
- https://github.com/moby/moby/issues/19474#issuecomment-335253478
Portanto, em 2023, você ainda terá soluções alternativas com /etc/resolv e /etc/hosts ou corrigir o código para desativar o ES.