Behebung von Docker 'permission denied' beim Verbindungsversuch mit dem Docker-Daemon-Socket

English Deutsch

Problem:

Du versuchst, einen Docker-Container auszuführen oder das Docker-Tutorial zu machen, aber du erhältst nur eine Fehlermeldung wie diese:

docker_permission_error.txt
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

Lösung

Die Fehlermeldung sagt dir, dass dein aktueller Benutzer nicht auf die Docker-Engine zugreifen kann, weil dir die Berechtigungen für den Zugriff auf den Unix-Socket zur Kommunikation mit der Engine fehlen.

Als temporäre Lösung kannst du sudo verwenden, um den fehlgeschlagenen Befehl als root auszuführen (z.B. sudo docker ps). Es wird jedoch empfohlen, das Problem zu beheben, indem du den aktuellen Benutzer zur docker-Gruppe hinzufügst:

Führe diesen Befehl in deiner bevorzugten Shell aus und melde dich dann vollständig von deinem Konto ab und wieder an (oder beende deine SSH-Sitzung und verbinde dich neu, im Zweifelsfall starte den Computer neu, auf dem du Docker auszuführen versuchst!):

usermod_add_docker.sh
sudo usermod -a -G docker $USER

Nachdem du das getan hast, solltest du den Befehl ohne Probleme ausführen können. Führe docker run hello-world als normaler Benutzer aus, um zu prüfen, ob es funktioniert. Starte neu, falls das Problem weiterhin besteht.

Siehe Was bewirkt sudo usermod -a -G group $USER unter Linux? für Details dazu, was dieser Befehl auf deinem System ändert und was die Parameter bedeuten.

Ab- und wieder anmelden ist erforderlich, weil die Gruppenänderung keine Wirkung hat, solange deine Sitzung nicht geschlossen ist.

Hintergrundinformationen

Unter Linux, wenn du einen docker-Befehl ausführst, versucht das docker-Binary, sich mit /var/run/docker.sock zu verbinden. Wie an der .sock-Erweiterung erkennbar, ist diese Datei ein Unix Domain Socket — im Grunde eine Möglichkeit, dass mehrere Prozesse auf dem lokalen Computer kommunizieren können (auch ein IPC-Mechanismus genannt — IPC = „Inter-Process Communication").

Im Fall von Docker besteht der Hauptgrund für die Verwendung des Sockets darin, dass jeder Benutzer, der zur docker-Gruppe gehört, sich mit dem Socket verbinden kann, während der Docker-Daemon selbst als root läuft. Im Wesentlichen ist dies eine Komfortfunktion und ermöglicht es mehreren docker-Client-Befehlen, intern mit demselben Daemon-Prozess zu kommunizieren.


Check out similar posts by category: Container, Docker, Linux