DNS in Docker: Resolver Chains, Search Domains und Caching

DNS ist ein zentraler Bestandteil jeder Container-Umgebung. In Docker-Setups werden Container häufig über Service-Namen anstelle von IP-Adressen angesprochen, wodurch DNS-Resolver, Suchdomänen und Caching eine entscheidende Rolle für Konnektivität und Performance spielen. Dieser Artikel erklärt die Docker-internen DNS-Mechanismen, die Funktionsweise von Resolver-Chains, die Konfiguration von Search Domains und effektive Strategien für Caching und Troubleshooting.

1. Docker interne DNS-Architektur

Docker nutzt einen eingebauten DNS-Server für Container-Netzwerke, der automatisch Service-Namen auf IP-Adressen auflöst. Jeder Container in einem benutzerdefinierten Netzwerk verwendet diesen DNS-Server, während standardmäßige Bridge-Netzwerke die Namensauflösung auf Host-Resolver zurückfallen lassen.

Funktionsweise

  • Beim Start erstellt Docker für jedes benutzerdefinierte Netzwerk einen DNS-Server auf 127.0.0.11.
  • Container fragen zuerst diesen Resolver ab, bevor sie die Host-DNS-Server kontaktieren.
  • Der Docker-DNS erkennt Container-Namen, Aliase und Service-Namen in Docker Compose.
docker run -d --name web --network app-net nginx
docker run -it --network app-net --rm busybox nslookup web

Der Resolver gibt die interne IP des Containers zurück.

2. Resolver Chains und /etc/resolv.conf

Jeder Container erhält beim Start eine eigene /etc/resolv.conf, die die Reihenfolge der Resolver definiert:

nameserver 127.0.0.11
options ndots:0

Die ndots-Option beeinflusst, wann FQDNs abgefragt werden. Standardmäßig sorgt Docker dafür, dass interne Container-Namen direkt aufgelöst werden, bevor die Host-DNS-Server kontaktiert werden.

Host Resolver einbeziehen

Wenn der interne Resolver keine Antwort liefert, werden die Nameserver des Hosts als Fallback genutzt. Diese Reihenfolge ist entscheidend für Multi-Environment Setups und Hybrid-Netzwerke:

docker network create 
  --driver bridge 
  --dns 8.8.8.8 
  --subnet 172.20.0.0/16 
  hybrid-net

3. Search Domains in Compose

Docker Compose erlaubt die Definition von search-Domains, um kurze Service-Namen automatisch aufzulösen:

networks:
  app-net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.21.0.0/16
    driver_opts:
      com.docker.network.bridge.name: br-app
    dns:
      - 127.0.0.11
    dns_search:
      - example.local
      - services.local

Damit kann ein Container db statt db.example.local ansprechen.

4. Caching-Mechanismen

Docker-DNS führt ein internes Cache für schnelle Namensauflösung. Dieses Cache reduziert Latenz und Entlastet Host-Resolver, kann jedoch bei dynamischen Umgebungen zu Stale-Records führen.

Cache invalidieren

Bei Problemen hilft oft ein Neustart des Containers oder das Leeren des DNS-Caches im Container:

docker exec -it web kill -SIGHUP 1
docker restart web

5. Troubleshooting und Debugging

  • DNS-Auflösung testen:
    docker exec web nslookup db
  • Reverse Lookup prüfen:
    docker exec web getent hosts db
  • Docker-DNS Logs analysieren:
    journalctl -u docker | grep "dns"
  • IP-Konflikte oder Aliase mit
    docker network inspect app-net

    prüfen

6. Best Practices

  • Benutzerdefinierte Netzwerke für Compose Stacks immer verwenden, um isolierte DNS-Resolver zu erhalten.
  • Search Domains gezielt setzen, um kurze Namen konsistent aufzulösen.
  • Bei dynamischen Diensten TTL und Cache-Verhalten beachten.
  • Bei Hybrid- oder Cloud-Setups Host-Resolver korrekt einbinden.
  • Monitoring und Logging für DNS aktivieren, um Latency- oder Ausfallprobleme früh zu erkennen.

Fazit

DNS in Docker ist mehrschichtig: interne Resolver, Host-Fallbacks, Search Domains und Caching spielen zusammen. Durch gezielte Konfiguration und Monitoring lassen sich Namensauflösung, Performance und Ausfallsicherheit in Container-Netzwerken optimieren. Compose bietet zusätzliche Möglichkeiten, DNS-Verhalten konsistent über Umgebungen hinweg zu steuern.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles