Die Erstkonfiguration des Docker-Daemons - daemon.json erklärt
Die Erstkonfiguration des Docker-Daemons - daemon.json erklärt
Die /etc/docker/daemon.json ist die zentrale Konfigurationsdatei für Docker – wer sie kennt, hat volle Kontrolle über das Verhalten des Daemons.
Grundstruktur
# Datei erstellen oder bearbeiten
nano /etc/docker/daemon.json
Die Datei muss valides JSON sein. Syntaxfehler verhindern den Start des Daemons.
# Konfiguration validieren bevor Docker neu gestartet wird
dockerd --validate
Datenpfad ändern
Standardmäßig speichert Docker alles unter /var/lib/docker/ – oft auf der Root-Partition. Bei vollen Disks oder wenn Daten auf einer anderen Partition liegen sollen:
{
"data-root": "/mnt/data/docker"
}
Bestehende Daten müssen manuell migriert werden:
systemctl stop docker
rsync -aP /var/lib/docker/ /mnt/data/docker/
Log-Konfiguration
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
DNS-Server
Wenn Container DNS-Probleme haben (Standard ist der Google-DNS 8.8.8.8):
{
"dns": ["1.1.1.1", "1.0.0.1"]
}
Oder eigenen DNS-Server für interne Domains:
{
"dns": ["192.168.1.1", "8.8.8.8"]
}
Interne Registry ohne HTTPS
Für lokale Docker-Registries ohne TLS-Zertifikat:
{
"insecure-registries": ["registry.intern:5000", "192.168.1.50:5000"]
}
Container-Subnetz ändern
Docker nimmt sich standardmäßig 172.17.0.0/16 – das kann mit bestehenden Netzwerken kollidieren:
{
"default-address-pools": [
{
"base": "10.10.0.0/16",
"size": 24
}
]
}
Userland-Proxy deaktivieren
Docker nutzt standardmäßig einen Userland-Proxy für Port-Mappings. Das kostet Performance. Auf Linux kann man direkt iptables-Regeln nutzen:
{
"userland-proxy": false
}
Achtung: Auf manchen Systemen kann das Probleme mit IPv6 oder bestimmten Netzwerkkonfigurationen verursachen. Testen bevor man das auf Produktion einsetzt.
Vollständiges Beispiel
{
"data-root": "/mnt/data/docker",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"dns": ["1.1.1.1", "1.0.0.1"],
"userland-proxy": false,
"default-address-pools": [
{
"base": "10.10.0.0/16",
"size": 24
}
]
}
Änderungen übernehmen
# Daemon neu starten
systemctl restart docker
# Effektive Konfiguration prüfen
docker info
docker info zeigt unter anderem Docker Root Dir, Logging Driver und DNS – damit kann man verifizieren dass die Änderungen übernommen wurden.
Gefährliche Einstellungen
"live-restore": true– Container überleben einen Daemon-Neustart. Klingt gut, kann aber bei Netzwerk- oder Volume-Problemen dazu führen dass Container in inkonsistenten Zuständen weiter laufen."experimental": true– Aktiviert experimentelle Features die sich ohne Vorwarnung ändern können.
Diese Einstellungen nur verwenden wenn man die Implikationen versteht.