
He estado intentando configurar el nombre de dominio dentro de un contenedor y comprobar cómo el DNS de Docker integrado maneja esas configuraciones. Pero me sorprendió ver que solo recibí un nombre de dominio truncado al realizar una búsqueda inversa de ns.
Configuré el fqdn para que fuera como ldec<i>.n18.org
El comando hostname --fqdn
dentro del contenedor me devolvió ldec1.n18.org
como se esperaba, el ping ping ldec1.n18.org
funciona como se esperaba con fqdn resuelto correctamente.
Pero si hago una búsqueda ns inversa como dig -x <container_ip>
, siempre obtengo un nombre de dominio truncado como ldec3.n18
en lugar 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
Entonces, ¿por qué dig me devuelve un nombre de dominio truncado?
Para construir la imagen
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 los 3 contenedores en la misma red
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
Respuesta1
Para responder a mi propia pregunta, probé con Podman V3 junto con el complemento dnsname y con dnsmasq en el host y finalmente obtuve lo que esperaba.
...
;; 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.
...
Entonces, parece que el DNS interno de Docker tiene una forma muy específica/obstinada de responder solicitudes de DNS inversas y si necesita un comportamiento de DNS más convencional, para probar sus roles ansibles relacionados con configuraciones de red, etc., sería mejor que usara Podman V3. o intentar desviar el DNS interno de Docker y usar algo como dnsmasq o bind9.
Consulte también este hilo relacionado en SO que explica:¿Cómo-puedo-dar-acceso-a-los-contenedores-docker-a-un-dnsmasq-local-dns-resolver-en-el-h?.
EDITAR2:DNS integrado de Docker
Las consultas de DNS inversas en hosts dentro de redes personalizadas son "peculiares" y Docker no le permitirá deshabilitar su DNS integrado (se remonta a 2017):
- https://github.com/moby/moby/issues/26298#issuecomment-339126461
- https://github.com/moby/moby/issues/19474#issuecomment-335253478
Entonces, en 2023, todavía le quedan soluciones alternativas con /etc/resolv y /etc/hosts o parchear el código para deshabilitar ES.