Ich versuche, den tatsächlichen Grund für das Mounten docker.sock
in einer docker-compose.yml
Datei zu verstehen . Ist es für die automatische Erkennung?
volumes:
- /var/run/docker.sock:/var/run/docker.sock
docker.sock
ist der UNIX-Socket, den der Docker-Daemon abhört. Es ist der Haupteinstiegspunkt für die Docker-API. Es kann sich auch um einen TCP-Socket handeln, aus Sicherheitsgründen verwendet Docker jedoch standardmäßig den UNIX-Socket.
Der Docker-CLI-Client verwendet diesen Socket standardmäßig, um Docker-Befehle auszuführen. Sie können diese Einstellungen auch überschreiben.
Es kann verschiedene Gründe geben, warum Sie den Docker-Socket möglicherweise in einem Container montieren müssen. Als würde man neue Container aus einem anderen Container heraus starten. Oder für die automatische Erkennung und Protokollierung von Diensten. Dies erhöht die Angriffsfläche. Sie sollten also vorsichtig sein, wenn Sie den Docker-Socket in einen Container einbinden. In diesem Container werden vertrauenswürdige Codes ausgeführt. Andernfalls können Sie einfach Ihren Host gefährden, auf dem der Docker-Daemon ausgeführt wird, da Docker standardmäßig alle Container als Root startet.
Docker-Socket verfügt in den meisten Installationen über eine Docker-Gruppe, sodass Benutzer in dieser Gruppe Docker-Befehle für Docker-Socket ohne Root-Berechtigung ausführen können. Die tatsächlichen Docker-Container erhalten jedoch weiterhin Root-Berechtigung, da der Docker-Daemon effektiv als Root ausgeführt wird (für den Zugriff auf Namespace und Cgroups ist Root-Berechtigung erforderlich). .
Ich hoffe es beantwortet deine Frage.
Weitere Informationen: https://docs.docker.com/engine/reference/commandline/dockerd/#examples
/var/run/docker.sock
Ich weiß, dass es etwas spät ist, aber ich hoffe, dass meine Antwort so viele Einblicke gibt
Der Begriff Sockets bezieht sich üblicherweise auf IP-Sockets. Dies sind diejenigen, die an einen Port (und eine Adresse) gebunden sind, an die wir TCP-Anforderungen senden und von denen wir Antworten erhalten.
Ein anderer Socket-Typ ist ein Unix-Socket. Diese Sockets werden für IPC (Interprocess Communication) verwendet. Sie werden auch als Unix Domain Sockets ( UDS ) bezeichnet. Unix-Sockets verwenden das lokale Dateisystem für die Kommunikation, während IP-Sockets das Netzwerk verwenden.
Der Docker-Daemon kann über drei verschiedene Socket-Typen auf Docker Engine-API-Anforderungen warten :
unix, tcp, and fd
.Standardmäßig wird unter /var/run/docker.sock ein Unix-Domain-Socket (oder IPC-Socket) erstellt
Sehen wir uns einige Live-Beispiele an :
Docker Server verwendet diesen Socket, um die REST-API abzuhören, und die Clients verwenden den Socket, um API-Anforderungen an den Server zu senden.
Einige Befehle :
Schauen Sie sich diesen schönen Artikel an
quelle
Grundsätzlich wird der Host-Docker-Daemon dem Container ausgesetzt. Sie können also Docker-API / -Client von Ihrem Container aus aufrufen, um Images / Container zu starten / zu stoppen / zu erstellen, beispielsweise indem Sie diese Befehle direkt auf dem Host aufrufen.
quelle