Interne DNS-Namen in Docker
Was dieser Artikel über interne Docker-DNS behandelt
- Wie Container einander per Namen erreichen.
- DNS in benutzerdefinierten Netzwerken.
- Aliases und Netzwerknamen.
- DNS-Fehler beheben.
- Verhältnis zur
/etc/hosts.
Einleitung: Interne DNS-Namen in Docker
Docker bietet in benutzerdefinierten Netzwerken eine eigene DNS-Auflösung. Container können sich nicht nur per IP, sondern auch über ihren Dienstnamen, ihren Alias oder den Containernamen erreichen. Das macht Compose-Setups deutlich stabiler, denn IPs können sich ändern, Namen bleiben konsistent. Wer interne DNS-Namen versteht, kann Anwendungen ohne hartkodierte IPs betreiben.
Dieser Artikel zeigt, wie Docker-interne DNS funktioniert und wie man sie nutzt.
Wichtige Begriffe
- Container-Name: Name des Containers im Docker-System.
- Dienstname: Name in Compose.
- Alias: Zusätzlicher DNS-Name.
- Benutzerdefiniertes Netzwerk: Netzwerk mit eingebautem DNS.
- Default-Bridge: Standardnetz ohne DNS.
- DNS-Resolver: Dienst, der Namen in IPs auflöst.
- Hostname: Name, den der Container selbst trägt.
Warum benutzerdefinierte Netzwerke?
In der Default-Bridge müssen Container über IPs kommunizieren. Benutzerdefinierte Netzwerke bringen eingebautes DNS:
docker network create mein-netz
docker run -d --name web --network mein-netz nginx
docker run -d --name app --network mein-netz curlimages/curl curl http://web
web wird automatisch in die IP aufgelöst.
In Compose
services:
web:
image: nginx
app:
image: curlimages/curl
command: curl http://web
Compose erstellt automatisch ein Netzwerk, in dem web als DNS-Name verfügbar ist.
Aliases
services:
db:
image: postgres
networks:
backend:
aliases:
- datenbank
- db-primary
networks:
backend:
Andere Container können db, datenbank oder db-primary ansprechen.
Hostname festlegen
services:
app:
image: mein-app
hostname: app-1
Im Container ist dann app-1 der eigene Hostname.
DNS prüfen
Innerhalb eines Containers:
nslookup web
nslookup db
Falls nslookup fehlt:
getent hosts web
DNS-Server
Docker verwendet einen internen Resolver. Externe DNS-Server können in Compose gesetzt werden:
services:
app:
image: mein-app
dns:
- 1.1.1.1
- 8.8.8.8
Das überschreibt den Container-DNS nur für externe Abfragen.
Mehrere Netzwerke
Ein Container kann in mehreren Netzwerken sein und hat dann mehrere Namen:
services:
app:
networks:
- frontend
- backend
networks:
frontend:
backend:
Andere Container im gleichen Netz erreichen app über den Dienstnamen.
DNS-Probleme
Namen nicht auflösbar
- Container im gleichen Netz?
- Rechtschreibung des Dienstnamens prüfen.
- Compose neu gestartet?
IP hat sich geändert
Das ist normal. Container-Name bleibt stabil, IP nicht.
Externe Namen nicht erreichbar
- Docker-DNS-Weiterleitung prüfen.
dnsOption in Compose setzen.- Firewall regeln.
Name mit Bindestrich
Docker-DNS unterstützt Bindestriche. Punkte sollten vermieden werden.
Tipps
- Immer benutzerdefinierte Netze oder Compose verwenden.
- Klare, eindeutige Dienstnamen wählen.
- Aliases für Abwärtskompatibilität nutzen.
- Keine IPs in URLs hinterlegen.
- DNS im Container testen, wenn Probleme auftreten.
- Externe DNS separat konfigurieren.
Weiterführende Links und Infos
- BotServ.de Docker Netzwerk
- BotServ.de Docker Netzwerk-Isolation
- BotServ.de Docker Compose
- BotServ.de Docker Reverse Proxy
FAQ: Interne Docker-DNS
Können Container sich im Standard-Bridge-Netz per Namen erreichen? Nein, dort gibt es kein eingebautes DNS.
Wie heisst der DNS-Name in Compose?
Der Dienstname aus der services:-Sektion.
Was sind Aliases? Zusätzliche Namen für denselben Container im Netzwerk.
Warum ändert sich die IP? Weil Container bei Neustart neue IPs bekommen können.
Kann ich einen eigenen DNS-Server eintragen?
Ja, über dns in Compose oder docker run.
Quellen und weiterführende Literatur
- Docker DNS: https://docs.docker.com/config/containers/container-networking/#dns-services
- Compose Networking: https://docs.docker.com/compose/networking/
- Custom Networks: https://docs.docker.com/network/bridge/
Zusammenfassung: Interne DNS-Namen in Docker
Benutzerdefinierte Docker-Netzwerke bieten interne DNS-Auflösung, die Container per Namen erreichbar macht. Compose nutzt diese automatisch, Aliases erlauben zusätzliche Namen und Hostname konfigurieren den internen Rechnernamen. Wer auf klare Namen verzichtet und IPs hartkodiert, macht Setups fragil. Mit Docker-DNS bleiben Verbindungen stabil, selbst wenn sich IPs ändern.


