Docker Socket Proxy sicher einrichten¶
Veröffentlicht am 22. August 2026 · Geschätzte Lesezeit: 4 Minuten
Viele Verwaltungs- und Monitoring-Container benötigen Informationen von Docker. Ein direkter Zugriff auf /var/run/docker.sock gibt ihnen jedoch weitreichende Kontrolle über den gesamten Host. Ein Docker Socket Proxy schaltet nur ausdrücklich erlaubte Teile der Docker-API frei. Die Einrichtung dauert etwa 15 Minuten.
Voraussetzungen
- Ein Linux-Server mit Docker und Docker Compose
- Zugriff auf die Kommandozeile des Servers
- Ein Container, der
DOCKER_HOSToder eine entfernte Docker-API unterstützt - Grundkenntnisse im Bearbeiten einer
compose.yaml
1. Projektordner anlegen¶
Führe diesen Befehl auf dem Docker-Server aus. Er erstellt einen eigenen Ordner für den Proxy und wechselt hinein:
2. Compose-Datei anlegen¶
Lege im Projektordner eine Datei namens compose.yaml mit folgendem Inhalt an:
services:
socket-proxy:
image: lscr.io/linuxserver/socket-proxy:latest
container_name: socket-proxy
restart: unless-stopped
read_only: true
environment:
CONTAINERS: "1"
EVENTS: "1"
PING: "1"
POST: "0"
VERSION: "1"
TZ: Europe/Berlin
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
tmpfs:
- /run
networks:
- socket-proxy
networks:
socket-proxy:
name: socket-proxy
internal: true
CONTAINERS=1 erlaubt lesende Container-Abfragen. POST=0 blockiert schreibende API-Aufrufe. Das interne Netzwerk besitzt keine veröffentlichte Host-Schnittstelle.
Proxy niemals öffentlich freigeben
Ergänze keinen Eintrag unter ports. Der Proxy verwendet unverschlüsseltes HTTP und darf nur über das private Docker-Netz erreichbar sein. Aktiviere nur API-Bereiche, die ein konkreter Dienst tatsächlich benötigt.
3. Proxy starten¶
Starte den Proxy im Projektordner:
Prüfe seinen Status:
Kontrolliere bei Problemen die Protokolle:
4. Lesenden Zugriff testen¶
Der folgende temporäre Container wird im privaten Netzwerk gestartet und fragt den Ping-Endpunkt ab:
Als Antwort sollte OK erscheinen.
Teste danach die erlaubte Liste der laufenden Container:
docker run --rm --network socket-proxy curlimages/curl:latest -fsS http://socket-proxy:2375/containers/json
Die Ausgabe ist JSON und enthält Informationen über laufende Container.
5. Schreibzugriff testen¶
Dieser Test versucht einen blockierten POST-Aufruf und gibt nur den HTTP-Statuscode aus:
docker run --rm --network socket-proxy curlimages/curl:latest -s -o /dev/null -w '%{http_code}\n' -X POST http://socket-proxy:2375/containers/create
Der erwartete Status ist 403. Damit bestätigt der Proxy, dass schreibende Aufrufe gesperrt sind.
6. Einen Dienst mit dem Proxy verbinden¶
Entferne beim gewünschten Dienst die direkte Einbindung von /var/run/docker.sock. Ergänze stattdessen sinngemäß folgende Einträge in dessen compose.yaml:
services:
<dienstname>:
environment:
DOCKER_HOST: tcp://socket-proxy:2375
networks:
- socket-proxy
networks:
socket-proxy:
external: true
Ersetze <dienstname> durch den tatsächlichen Namen des Dienstes. Übernimm vorhandene Einstellungen und Netzwerke; ein Container kann mit mehreren Netzwerken verbunden sein.
Kompatibilität prüfen
Nicht jede Anwendung unterstützt DOCKER_HOST. Prüfe die Dokumentation des Dienstes. Benötigt er weitere Docker-API-Bereiche, aktiviere ausschließlich die dort genannten Variablen am Proxy und teste erneut.
7. Berechtigungen klein halten¶
Die offiziellen Proxy-Variablen entsprechen Bereichen der Docker-API. Werte mit 1 erlauben den Bereich, Werte mit 0 sperren ihn. Lasse besonders AUTH, SECRETS und POST deaktiviert, solange sie nicht zwingend benötigt werden.
Nur Lesen als Ausgangspunkt
Beginne mit CONTAINERS=1 und POST=0. Ergänze weitere Bereiche einzeln. Wenn eine Anwendung danach weiterhin funktioniert, erhält sie nicht mehr Rechte als nötig.
8. Backup und Rückweg¶
Der Proxy speichert keine eigenen Nutzdaten. Sichere deshalb seine Compose-Datei:
Vor Änderungen am angebundenen Dienst sicherst du auch dessen Compose-Datei. Zum Abschalten des Proxys führst du im Proxy-Ordner aus:
Stelle anschließend die vorherige Konfiguration des Dienstes wieder her. Eine erneute direkte Einbindung des Docker-Sockets funktioniert zwar oft, bringt aber das ursprüngliche Sicherheitsrisiko zurück.
9. Typische Fehler beheben¶
- Name
socket-proxywird nicht gefunden: Der Dienst ist nicht mit dem externen Netzwerksocket-proxyverbunden. - HTTP 403 bei einer erlaubten Funktion: Der benötigte API-Bereich ist noch deaktiviert. Ermittle ihn in der Dokumentation der Anwendung.
- HTTP 403 bei POST: Das ist bei
POST=0beabsichtigt. Aktiviere Schreibzugriffe nicht pauschal. - Dienst braucht zusätzlich Internetzugriff: Behalte sein bisheriges Netzwerk bei und füge
socket-proxyals zweites Netzwerk hinzu. - Verbindung über die Server-IP klappt nicht: Das ist gewollt, weil kein Port am Host veröffentlicht wurde.
10. Quellen und Videos¶
- Offizielles Projekt Docker Socket Proxy
- LinuxServer-Dokumentation zum Socket Proxy
- Video: How To Setup A Docker Socket Proxy
- Video: Docker Socket Proxy – a plus for container security
Fertig¶
Der Docker Socket Proxy liefert nun lesende Container-Informationen über ein internes Netzwerk und blockiert Schreibzugriffe mit HTTP 403. Wiederhole den Ping-, Container- und POST-Test nach jeder Rechteänderung, damit die Schutzwirkung nachvollziehbar bleibt.