0 Votes

Code source wiki de DockerSocketProxy

Version 1.1 par john le 2026/09/18 23:42

Afficher les derniers auteurs
1 Proxy filtrant devant l'API Docker. Il permet à un service de lire l'état des conteneurs sans lui donner accès au socket Docker, qui équivaut à un accès root sur l'hôte.
2
3 == Utilisateurs ==
4
5 |=Service|=Besoin|=Requête
6 |[[n8n>>Wiki Batcave John.Infrastructure.ServeurPrincipal.n8n.WebHome]]|Notification des mises à jour de conteneurs|##GET /containers/json##
7
8 == Stack ==
9
10 {{code language="yaml"}}
11 services:
12 dockersocket:
13 image: tecnativa/docker-socket-proxy:latest
14 container_name: dockersocket
15 restart: unless-stopped
16 environment:
17 - CONTAINERS=1
18 - POST=0
19 volumes:
20 - /var/run/docker.sock:/var/run/docker.sock:ro
21 networks:
22 - docker-api
23
24 networks:
25 docker-api:
26 name: docker-api
27 {{/code}}
28
29 * Seule la lecture des conteneurs est ouverte ; toutes les autres sections de l'API sont fermées par défaut.
30 * ##POST=0## interdit toute écriture : création, arrêt ou suppression de conteneurs sont refusés (##403##).
31 * Le proxy est sur un réseau dédié, ##docker-api##. Seuls les services qui en ont besoin y sont ajoutés, en déclarant ce réseau en ##external## dans leur stack.
32
33 {{warning}}
34 Ne jamais mettre ce proxy sur le réseau partagé ##proxy## : ##CONTAINERS=1## donne aussi accès au détail de chaque conteneur, y compris ses variables d'environnement et donc ses mots de passe. Et ne jamais activer ##POST=1## avec ##CONTAINERS=1## : un service compromis pourrait créer un conteneur privilégié et prendre le contrôle de l'hôte.
35 {{/warning}}
36
37 == Vérifier ==
38
39 Depuis un conteneur autorisé, la lecture doit fonctionner et l'écriture être refusée :
40
41 {{code language="bash"}}
42 docker exec n8n wget -qO- http://dockersocket:2375/containers/json | head -c 80; echo
43 docker exec n8n wget -qO- --post-data='' http://dockersocket:2375/containers/create 2>&1 | tail -1
44 {{/code}}
45
46 Voir quelles requêtes passent réellement par le proxy :
47
48 {{code language="bash"}}
49 docker logs dockersocket --since 24h 2>&1 | grep -oE '(GET|POST|DELETE|PUT) [^ ]+' | sed -E 's/\?.*//' | sort | uniq -c | sort -rn
50 {{/code}}