ich auf dieser Seite gestoßen beim Versuch Docker Socket-Aufrufe aus einem Behälter arbeiten zu machen, die als nobody
Benutzer ausgeführt wird.
In meinem Fall bekam ich Zugriff verweigert Fehler, wenn my-service
versuchen würde, Anrufe an den Docker-Socket zu machen, um verfügbare Container aufzulisten.
Ich endete mit docker-socket-proxy, um den Docker-Socket zu my-service
Proxy. Dies ist ein anderer Ansatz, um auf den Docker-Socket innerhalb eines Containers zuzugreifen, also würde ich es teilen.
Ich machte my-service
in der Lage, den Docker-Host zu empfangen, mit dem es sprechen sollte, docker-socker-proxy
in diesem Fall über die Umgebungsvariable DOCKER_HOST
.
Beachten Sie, dass docker-socket-proxy
als root
Benutzer ausgeführt werden muss, um den Docker-Socket zu my-service
Proxy zu ermöglichen.
Beispiel docker-compose.yml
:
version: "3.1"
services:
my-service:
image: my-service
environment:
- DOCKER_HOST=tcp://docker-socket-proxy:2375
networks:
- my-service_my-network
docker-socket-proxy:
image: tecnativa/docker-socket-proxy
environment:
- SERVICES=1
- TASKS=1
- NETWORKS=1
- NODES=1
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- my-service_my-network
deploy:
placement:
constraints: [node.role == manager]
networks:
my-network:
driver: overlay
Beachten Sie, dass die oben compose Datei bereit Schwarm (docker stack deploy my-service
), aber es sollte auch (docker-compose up -d
) in Compose-Modus arbeiten. Das Schöne an diesem Ansatz ist, dass my-service
nicht mehr auf einem Schwarm-Manager ausgeführt werden muss.
Sie sollten dies nie tun, siehe https://www.lvh.io/posts/dont-expose-the-docker-socket-not-even-to-a-container.html – Zarathustra
@ Zarathustra einverstanden und danke. Die Frage war jedoch nicht, ob es getan werden sollte oder nicht. Ich werde die Antwort hier mit Warnung aktualisieren. –