Antworten:
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
Lassen Sie mich zunächst über Unix-Sockets sprechen
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.
curl kann über die
--unix-socket
Flagge mit einem Unix-Socket sprechen . Da die Docker Server-API als REST verfügbar gemacht wird, müssen Befehle über HTTP gesendet werden. Da dieser Server lokal ist (denken Sie daran, das Dateisystem), können wir auch einen beliebigen Hostnamen in der URL übergeben (oder uns an den lokalen Host halten, der auch gut funktioniert!). Der Server kümmert sich nicht um den Hostnamen, sondern nur um den Pfad.
curl --unix-socket /var/run/docker.sock http://localhost/images/json | jq
[
{
"Containers": -1,
"Created": 1525888860,
"Id": "sha256:24a77bfbb9ee3aeef9e24766ad6e9fa57f85c67596f154e8916e4f314067e149",
"Labels": null,
"ParentId": "",
"RepoDigests": [
"postgres@sha256:b06cdddba62f1550a1c674270814e72eaa8734d95912019b4ddc288b650ad67d"
],
"RepoTags": null,
"SharedSize": -1,
"Size": 39507096,
"VirtualSize": 39507096
}
]
Einige Befehle :
Mit docker.sock kann man viel machen
Schauen Sie sich diesen schönen Artikel an