
Ich habe versucht, einen Domänennamen in einem Container einzurichten und zu prüfen, wie das eingebettete Docker-DNS mit diesen Einstellungen umgeht. Aber ich war überrascht, dass mir beim Reverse-NS-Lookup nur ein verkürzter Domänenname zugewiesen wurde.
Ich habe den FQDN wie folgt eingestellt: ldec<i>.n18.org
Der Befehl hostname --fqdn
im Container wurde mir ldec1.n18.org
wie erwartet zurückgegeben, der Ping ping ldec1.n18.org
funktioniert wie erwartet mit ordnungsgemäß aufgelöstem FQDN.
Wenn ich jedoch eine umgekehrte ns-Suche wie durchführe dig -x <container_ip>
, wird mir immer ein verkürzter Domänenname wie ldec3.n18
anstelle von zurückgegeben 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
Warum gibt Dig mir einen verkürzten Domänennamen zurück?
So erstellen Sie das Image
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
So starten Sie die 3 Container im selben Netzwerk
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
Antwort1
Um meine eigene Frage zu beantworten, habe ich mit Podman V3 zusammen mit dem DNSName-Plugin und mit DNSMasQ auf dem Host getestet und endlich das bekommen, was ich erwartet hatte
...
;; 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.
...
Es scheint also, dass Dockers interner DNS eine sehr spezifische/eigensinnige Art hat, auf Reverse-DNS-Anfragen zu antworten. Wenn Sie ein konventionelleres DNS-Verhalten benötigen, um Ihre Ansible-Rollen im Umgang mit Netzwerkkonfigurationen usw. zu testen, sind Sie möglicherweise mit Podman V3 besser bedient oder versuchen, Dockers internen DNS zu umgehen und etwas wie dnsmasq oder bind9 zu verwenden.
Sehen Sie sich auch diesen zugehörigen Thread auf SO an, der Folgendes erklärt:wie-kann-ich-Docker-Containern-Zugriff-auf-einen-lokalen-DNS-Resolver-auf-dem-H-erteilen.
EDIT2:Eingebettetes DNS von Docker
Reverse-DNS-Abfragen auf Hosts innerhalb eines benutzerdefinierten Netzwerks sind „eigenartig“ und Docker lässt Sie deren eingebetteten DNS nicht deaktivieren (stammt aus dem Jahr 2017):
- https://github.com/moby/moby/issues/26298#issuecomment-339126461
- https://github.com/moby/moby/issues/19474#issuecomment-335253478
Im Jahr 2023 bleiben Ihnen also immer noch Workarounds mit /etc/resolv und /etc/hosts oder das Patchen des Codes, um ES zu deaktivieren.