Website-Suche

So führen Sie Docker als Nicht-Root-Benutzer unter Linux aus


Die Installation von Docker unter Ubuntu ist sehr einfach! Jeder, auch Neulinge, kann es innerhalb von 15 Minuten installieren. Nach der Installation von Docker fiel mir auf, dass ich als normaler Benutzer die meisten Docker-Vorgänge nicht ausführen konnte. Ich musste Docker jedes Mal entweder als „root“-Benutzer oder mit der „sudo“-Berechtigung ausführen. Immer wenn ich versuche, Docker als Nicht-Root-Benutzer oder ohne Sudo-Berechtigung auszuführen, erhalte ich die folgende Fehlermeldung:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/version: dial unix /var/run/docker.sock: connect: permission denied

Ich wollte zum Beispiel als normaler Benutzer die Docker-Version mit folgendem Befehl überprüfen:

docker version

Und ich erhalte diese Fehlermeldung:

Client: Docker Engine - Community
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b7f0
Built: Wed Mar 11 01:25:46 2020
OS/Arch: linux/amd64
Experimental: false
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/version: dial unix /var/run/docker.sock: connect: permission denied

Aber wenn ich denselben Befehl mit sudo-Berechtigung ausführe;

sudo docker version

Es zeigt alle Details der aktuell installierten Docker-Version an, wie in der folgenden Ausgabe gezeigt.

Client: Docker Engine - Community
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        afacb8b7f0
 Built:             Wed Mar 11 01:25:46 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       afacb8b7f0
  Built:            Wed Mar 11 01:24:19 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

Fehler – Beim Versuch, eine Verbindung zum Docker-Daemon-Socket unter Unix herzustellen, wurde die Berechtigung verweigert

Nachdem ich die Docker-Dokumentationsseite durchsucht hatte, stellte ich fest, dass der Docker-Daemon standardmäßig an einen Unix-Socket und nicht an einen TCP-Port bindet. Da dieser Unix-Socket dem Root-Benutzer gehört, wird der Docker-Daemon nur als Root-Benutzer ausgeführt. Daher können normale Benutzer die meisten Docker-Befehle nicht ausführen.

Wenn Sie Docker unter Linux als Nicht-Root-Benutzer ausführen möchten, müssen Sie die folgenden Schritte ausführen. Ich habe es auf einem Ubuntu 18.04-Server getestet und es hat einwandfrei funktioniert! Es sollte auch auf anderen Linux-Distributionen funktionieren.

Wichtige Warnung:

Das Ausführen von Docker als normaler Benutzer ist aus Sicherheitsgründen keine gute Idee. Ich persönlich verwende dies nicht und empfehle es auch nicht. Wenn es sich um Ihr persönliches System handelt und Sie Ihr System nicht dem Internet aussetzen, ist das keine große Sache. Führen Sie Docker jedoch nicht als Nicht-Root-Benutzer in einem Produktionssystem aus.

Führen Sie Docker als Nicht-Root-Benutzer unter Linux aus

Um den Fehler „Docker-Berechtigung verweigert“ zu beheben und Docker als Nicht-Root-Benutzer zu verwenden, erstellen Sie mit dem folgenden Befehl eine Gruppe namens "docker":

sudo groupadd docker

Fügen Sie als Nächstes Ihren Benutzer zur Gruppe Docker hinzu:

sudo usermod -aG docker $USER

Nachdem Sie den Benutzer zur Docker-Gruppe hinzugefügt haben, melden Sie sich ab und wieder an, damit die Änderungen wirksam werden.

Alternativ können Sie den folgenden Befehl ausführen, um die Änderungen auf Gruppen anzuwenden:

newgrp docker

Von nun an kann der normale Benutzer (Nicht-Root-Benutzer) Docker ohne Sudo-Berechtigungen verwenden.

Lassen Sie mich als normaler Benutzer die folgenden Befehle ausführen:

docker version
docker run hello-world

Beispielausgabe:

Führen Sie Docker als Nicht-Root-Benutzer unter Linux aus

Sehen? Ich kann diese beiden Docker-Befehle jetzt ohne Sudo-Berechtigung ausführen.

Für den Fall, dass Sie bereits einige Docker-Befehle mit der Berechtigung „sudo“ ausgeführt haben, bevor Sie Ihren Benutzer zur Docker-Gruppe hinzugefügt haben, wird Ihnen wahrscheinlich eine Fehlermeldung wie die folgende angezeigt.

WARNING: Error loading config file: /home/user/.docker/config.json -
stat /home/user/.docker/config.json: permission denied

Die obige Fehlermeldung weist darauf hin, dass Ihr Verzeichnis ~/.docker/ aufgrund der „sudo“-Befehle mit falschen Berechtigungen erstellt wurde.

Um dieses Problem zu beheben, ändern Sie den Besitz und die Berechtigungen dieses Verzeichnisses mit den folgenden Befehlen:

sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
sudo chmod g+rwx "$HOME/.docker" -R

Melden Sie sich ab und wieder an, damit dies wirksam wird.

Wenn das Problem dadurch immer noch nicht behoben wird, müssen Sie möglicherweise Ihr Verzeichnis ~/.docker/ entfernen. Es wird automatisch neu erstellt, Sie verlieren jedoch alle benutzerdefinierten Einstellungen, sofern vorhanden.

Ressource:

  • Docker-Post-Installationshinweise