Zum Inhalt

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_HOST oder 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:

mkdir -p ~/docker-socket-proxy && cd ~/docker-socket-proxy

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:

docker compose up -d

Prüfe seinen Status:

docker compose ps

Kontrolliere bei Problemen die Protokolle:

docker compose logs --tail=50 socket-proxy

4. Lesenden Zugriff testen

Der folgende temporäre Container wird im privaten Netzwerk gestartet und fragt den Ping-Endpunkt ab:

docker run --rm --network socket-proxy curlimages/curl:latest -fsS http://socket-proxy:2375/_ping

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:

cp compose.yaml compose.yaml.backup

Vor Änderungen am angebundenen Dienst sicherst du auch dessen Compose-Datei. Zum Abschalten des Proxys führst du im Proxy-Ordner aus:

docker compose down

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-proxy wird nicht gefunden: Der Dienst ist nicht mit dem externen Netzwerk socket-proxy verbunden.
  • 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=0 beabsichtigt. Aktiviere Schreibzugriffe nicht pauschal.
  • Dienst braucht zusätzlich Internetzugriff: Behalte sein bisheriges Netzwerk bei und füge socket-proxy als 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

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.