Die Ausführung von Anwendungen mit Docker als tägliche Routine kann zu einem Albtraum werden, wenn Sie auf einen Fehler wie Docker-Berechtigung verweigert stoßen, während Sie versuchen, eine Verbindung herzustellen. Aber keine Sorge, dieser Artikel wird Ihnen helfen, schnell wieder einsatzbereit zu sein.
In diesem Tutorial erfahren Sie viele Möglichkeiten, um die gefürchtete Docker-Berechtigungsverweigerungsfehlermeldung zu beheben.
Voraussetzungen
Dieses Tutorial umfasst praktische Demonstrationen. Um mitzumachen, stellen Sie sicher, dass Sie folgendes haben:
- Die Demos in diesem Tutorial laufen unter Ubuntu 20.04, aber auch andere Linux-Distributionen funktionieren.
- Der Docker-Engine, mit der im Tutorial Version 20.10.8, Build 3967b7d läuft.
Ausführen von erhöhten Docker-Befehlen
Viele Faktoren könnten zu einem Berechtigungsfehler verweigert führen, während Sie eine Verbindung zu Docker herstellen. Einer dieser Faktoren ist, dass Sie möglicherweise Docker-Befehle ausführen, ohne den sudo
-Befehl voranzustellen. Der sudo
-Befehl ist das, was Ihnen erhöhte administrative Rechte zusammen mit Sicherheitsprivilegien beim Ausführen von Befehlen gibt.
Unten sehen Sie den gefürchteten Berechtigungsfehler verweigert, während Sie versuchen, einen docker
-Befehl auszuführen.

Starten Sie Ihr Terminal und fügen Sie dem unten stehenden docker
-Befehl sudo
hinzu, um das hello-world
-Docker-Image auszuführen. Da Sie einen erhöhten Befehl ausführen, müssen Sie Ihr Passwort eingeben, um fortzufahren.
Sie sehen eine Ausgabe ähnlich der unten gezeigten, die anzeigt, dass Docker korrekt installiert ist.

Neustart des Docker-Engines
Wenn das Ausführen erhöhter Docker-Befehle den Berechtigungsfehler nicht behebt, überprüfen Sie, ob Ihr Docker Engine ausgeführt wird. Ähnlich wie beim Ausführen eines docker
-Befehls ohne den sudo
-Befehl löst ein gestoppter Docker Engine den Berechtigungsfehler aus. Wie beheben Sie den Fehler? Durch Neustart Ihres Docker-Engines.
Führen Sie den unten stehenden systemctl
-Befehl aus, um den Status des Docker-Engines (status docker
) zu bestätigen und ob er läuft.
Unten sehen Sie, dass der Docker-Engine anhand des zurückgegebenen Status aktiv ist (active (running)).

Wenn der Docker-Engine nicht aktiv ist, führen Sie den systemctl
-Befehl unten aus, um den Docker-Engine zu starten (start docker
).
Jetzt führen Sie den Hello-World-Docker-Befehl aus, wie Sie es im Abschnitt „Ausführen von erhöhten Docker-Befehlen“ getan haben, um zu überprüfen, ob der Fehler behoben ist.
Hinzufügen eines Benutzerkontos zu einer Gruppe mit Nicht-Root-Benutzerzugriff
Sie haben bestätigt, dass Ihr Docker-Motor funktioniert, erhalten jedoch immer noch einen Docker-Permission Denied-Fehler? Wenn ja, müssen Sie Ihr Benutzerkonto zu einer Gruppe mit Nicht-Root-Benutzerzugriff hinzufügen. Warum? Weil jeder Docker-Befehl, den Sie auf einer Linux-Maschine außerhalb der Benutzergruppe ausführen, einen Permission Denied-Fehler auslöst.
- Führen Sie den folgenden
groupadd
-Befehl aus, um eine neue Gruppe namensdocker
zu erstellen. Geben Sie Ihr Passwort ein, um den Befehl fortzusetzen.
Wenn die Docker-Gruppe in der Benutzergruppe existiert, sehen Sie eine Ausgabe wie unten.

2. Führen Sie anschließend den usermod
-Befehl aus, bei dem die -aG
-Optionen dem Befehl mitteilen, Ihr Benutzerkonto (programmer
) zur (docker
)-Gruppe hinzuzufügen. Dieser Befehl bewirkt, dass Ihr Benutzerkonto keinen Rootzugriff hat.
3. Führen Sie den folgenden newgrp
-Befehl aus, um die aktuelle reale Gruppen-ID auf die docker
-Gruppe zu ändern.
Führen Sie diesen Befehl jedes Mal aus, wenn Sie Docker als Nicht-Root-Benutzer ausführen möchten.
4. Führen Sie abschließend das Hello-World-Docker-Image erneut aus, um zu bestätigen, dass Sie den Fehler nicht mehr sehen. Wenn Sie zu diesem Zeitpunkt immer noch einen Fehler erhalten, erwägen Sie, dem docker.sock-Datei mehr Zugriff zu geben. Die docker.sock-Datei ist der UNIX-Socket, ein Weg, um Prozessinformationen zwischen dem Benutzer und dem System zu kommunizieren, auf den der Docker-Daemon als Einstiegspunkt der Docker-API hört.
Führen Sie den chmod
-Befehl unten aus, um allen Benutzern Lese-/Schreibzugriff (666
) auf die /var/run/docker.sock
-Datei zu gewähren. Führen Sie nun das Hello-World-Docker-Image erneut aus, um zu sehen, ob der Fehler behoben ist.
Bearbeiten der Docker-Service-Unit-Datei
Wenn das Ausführen von Docker als Nicht-Root-Benutzer nicht ausreicht, um den Fehler zu beheben, versuchen Sie, die Docker-SystemD-, ein Dienstkontrollsystem, Dienst-Unit-Datei zu bearbeiten. Die Docker-Service-Datei enthält sensible Parameter, die das Verhalten des Docker-Daemons ändern können. Sie können das Standardverhalten der Docker-Unit-Datei durch Hinzufügen eines zusätzlichen Befehls zur Änderung des Dienststandardverhaltens ändern.
1. Führen Sie den folgenden Befehl aus, um die Docker-Service-Unit-Datei in Ihrem bevorzugten Texteditor zu öffnen. In diesem Beispiel wird die Docker-Service-Datei im Nano-Texteditor geöffnet.
2. Lokalisieren Sie den Bereich mit dem [Service]-Header in der Docker-Dienst-Unit-Datei, wie unten gezeigt. Kopieren/Einfügen Sie die Befehle unten in die Docker-Dienst-Unit-Datei und speichern Sie die Änderungen.
Unten setzt der Befehl SupplementaryGroups
die zusätzlichen Unix-Gruppen, in denen die Prozesse ausgeführt werden. Gleichzeitig bereinigt der Befehl ExecStartPost
Operationen, die auch ausgeführt werden, wenn der Dienst nicht korrekt gestartet wird.

3. Führen Sie nun die unten stehenden Befehle aus, um den Docker-Dienst neu zu starten und zu aktivieren. Dadurch können Sie den Docker-Dienst erneut starten, um Fehler zu vermeiden, wenn Sie Docker-Befehle ausführen.
4. Führen Sie schließlich das hello-world
-Docker-Image erneut aus und überprüfen Sie, ob Sie immer noch den Berechtigungsfehler erhalten.
Ausführen von Docker im Privilegienmodus
Zu guter Letzt steht auf der Liste zur Behebung des Docker-Berechtigungsfehlers das Ausführen von Docker im Privilegienmodus. Dadurch erhält ein Docker-Container Root-Zugriff auf das System.
Das Ausführen von Docker im privilegierten Modus birgt Risiken und ist anfällig für Angriffe von Hackern. Seien Sie also vorsichtig und führen Sie Docker nur im privilegierten Modus aus, wenn Sie genau wissen, was Sie tun.
1. Führen Sie den folgenden Befehl aus, um alle Docker-Container in Ihrem System aufzulisten, und erhalten Sie die ID des Containers, den Sie ausführen möchten.

2. Führen Sie als nächstes den Befehl docker inspect
aus, um zu überprüfen, ob der Container, den Sie ausführen möchten, bereits im privilegierten Modus ist (--format='{{.HostConfig.Privileged}}'
). Ersetzen Sie unten CONTAINER_ID
durch die tatsächliche Container-ID, die Sie in Schritt eins notiert haben.
Wenn sich der Container im privilegierten Modus befindet, gibt der Befehl einen true-Wert in die Konsole zurück. Wenn der Befehl jedoch einen falschen Wert zurückgibt, wie unten gezeigt, fahren Sie mit dem nächsten Schritt fort.

3. Führen Sie abschließend den Befehl docker
unten aus, um den Docker-Container im privilegierten Modus auszuführen (--privileged hello-world
).
Schlussfolgerung
In diesem Tutorial haben Sie viele Möglichkeiten gelernt, den Docker Berechtigungsverweigerungsfehler zu lösen, vom Ausführen erhöhter Befehle bis hin zum Ausführen von Docker im privilegierten Modus.
Jetzt wissen Sie, wie Sie einen Fehler beim Erstellen von Docker-basierten Anwendungen beseitigen können; vielleicht möchten Sie auch Ihre Docker-Images jederzeit sauber halten?
Source:
https://adamtheautomator.com/docker-permission-denied/