GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Fehlerbehebung bei Problemen mit verweigerten Docker-Zugriffen

Das Ausführen von Anwendungen mit Docker als tägliche Routine kann zu einem Albtraum werden, wenn Sie auf einen Fehler stoßen, z. B. Docker-Berechtigung verweigert, während Sie versuchen, eine Verbindung herzustellen. Aber keine Sorge, dieser Artikel wird Ihnen dabei helfen, im Handumdrehen wieder loszulegen.

In diesem Tutorial lernen Sie viele Möglichkeiten kennen, um die gefürchtete Docker-Erlaubnis verweigert Fehlermeldung zu beheben.

Voraussetzungen

Dieses Tutorial umfasst praktische Demonstrationen. Um mitzumachen, stellen Sie sicher, dass Sie Folgendes eingerichtet haben:

  • Die Demos in diesem Tutorial laufen auf Ubuntu 20.04, aber andere Linux-Distributionen funktionieren auch.
  • Die Docker-Engine mit der Tutorial-Version 20.10.8, Build 3967b7d.

Erhöhte Docker-Befehle ausführen

Viele Faktoren können zu einer Berechtigung verweigert führen Fehler beim Verbinden mit Docker. Einer dieser Faktoren ist, dass Sie möglicherweise Docker-Befehle ausführen, ohne sudo voranzustellen Befehl. Das sudo Befehl gibt Ihnen erhöhte Administratorrechte zusammen mit Sicherheitsprivilegien beim Ausführen von Befehlen.

Unten sehen Sie die gefürchtete Berechtigung verweigert Fehler beim Versuch, einen docker auszuführen Befehl.

Starten Sie Ihr Terminal und stellen Sie sudo voran zum docker Befehl unten zum run die hello-world Docker-Image. Da Sie einen Befehl mit erhöhten Rechten ausführen, müssen Sie Ihr Passwort eingeben, um fortzufahren.

sudo docker run hello-world

Sie sehen eine Ausgabe ähnlich der unten gezeigten, die anzeigt, dass Docker korrekt installiert ist.

Neustart der Docker-Engine

Wenn das Ausführen erhöhter Docker-Befehle die Berechtigung verweigert nicht behebt überprüfen Sie, ob Ihre Docker-Engine ausgeführt wird. Ähnlich wie beim Ausführen eines docker Befehl ohne sudo Befehl, löst eine gestoppte Docker-Engine die Berechtigung verweigert aus Error. Wie behebst du den Fehler? Indem Sie Ihre Docker-Engine neu starten.

Führen Sie systemctl aus Befehl unten, um den Status der Docker-Engine zu bestätigen (status docker ) und ob es läuft.

sudo systemctl status docker

Unten können Sie anhand des zurückgegebenen Status erkennen, dass aktiv (wird ausgeführt) angezeigt wird, dass die Docker-Engine ausgeführt wird

Wenn die Docker Engine nicht aktiv ist, führen Sie systemctl aus Befehl unten, um die Docker-Engine zu starten (start docker ).

sudo systemctl start docker

Führen Sie nun den Docker-Befehl hello-world aus, wie Sie es im Abschnitt „Erhöhte Docker-Befehle ausführen“ getan haben, um zu überprüfen, ob der Fehler behoben ist.

sudo docker run hello-world

Hinzufügen eines Benutzerkontos zu einer Gruppe mit Nicht-Root-Benutzerzugriff

Sie haben bestätigt, dass Ihre Docker-Engine funktioniert, aber Sie erhalten immer noch eine Docker-Berechtigung verweigert Error? Wenn dies der Fall ist, müssen Sie Ihr Benutzerkonto einer Gruppe mit Nicht-Root-Benutzerzugriff hinzufügen. Wieso den? Denn jeder Docker-Befehl, den Sie auf einem Linux-Rechner ausführen, der nicht in der Benutzergruppe ist, löst Berechtigung verweigert aus Fehler.

  1. Führen Sie groupadd aus Befehl unten, um eine neue Gruppe namens docker zu erstellen . Geben Sie Ihr Passwort ein, um mit der Ausführung des Befehls fortzufahren.
sudo groupadd docker

Wenn die Docker-Gruppe in der Benutzergruppe vorhanden ist, sehen Sie eine Ausgabe wie die folgende.

2. Führen Sie als nächstes den usermod aus Befehl unten, wo der -aG Optionen weisen den Befehl an, Ihr Benutzerkonto hinzuzufügen (programmer ) zum (docker ) Gruppe. Dieser Befehl bewirkt, dass Ihr Benutzerkonto Nichtbenutzerzugriff hat.

sudo usermod -aG docker programmer

3. Führen Sie newgrp aus Befehl unten, um die aktuelle reale Gruppen-ID in docker zu ändern Gruppe.

Führen Sie diesen Befehl jedes Mal aus, wenn Sie Docker als Nicht-Root-Benutzer ausführen möchten.

sudo newgrp docker 

4. Führen Sie schließlich das Docker-Image hello-world erneut aus, um zu bestätigen, dass der Fehler nicht mehr angezeigt wird. Wenn Sie zu diesem Zeitpunkt immer noch einen Fehler erhalten, sollten Sie erwägen, mehr Zugriff auf die docker.sock-Datei zu gewähren. Die docker.sock file ist der UNIX-Socket, eine Möglichkeit, Prozessinformationen zwischen dem Benutzer und dem System zu kommunizieren, die der Docker-Daemon als Einstiegspunkt der Docker-API überwacht.

Führen Sie chmod aus Befehl unten, um allen Benutzern Lese-/Schreibzugriff zu gewähren (666 ) Zugriff auf /var/run/docker.sock Datei. Führen Sie nun das Docker-Image hello-world erneut aus, um zu sehen, ob der Fehler behoben ist.

sudo chmod 666 /var/run/docker.sock

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, Docker SystemD, eine Service-Unit-Datei eines Dienststeuerungssystems, zu bearbeiten. Die Docker-Dienstdatei enthält sensible Parameter, die das Verhalten des Docker-Daemons verändern können. Sie können das Standardverhalten der Docker-Unit-Datei ändern, indem Sie einen zusätzlichen Befehl hinzufügen, um das Standardverhalten des Dienstes zu ändern.

1. Führen Sie den folgenden Befehl aus, um die Docker-Service-Unit-Datei in Ihrem bevorzugten Texteditor zu öffnen. Für dieses Beispiel wird die Docker-Dienstdatei im Nano-Texteditor geöffnet.

sudo nano /usr/lib/systemd/system/docker.service

2. Lokalisieren Sie den Bereich mit [Service] -Header in der Docker-Service-Unit-Datei, wie unten gezeigt. Kopieren Sie die folgenden Befehle, fügen Sie sie in die Docker-Service-Unit-Datei ein und speichern Sie die Änderungen.

Darunter die SupplementaryGroups Der Befehl legt die zusätzlichen Unix-Gruppen fest, in denen die Prozesse ausgeführt werden. Gleichzeitig wird der ExecStartPost Der Befehl bereinigt Vorgänge, die ausgeführt werden, selbst wenn der Dienst nicht ordnungsgemäß gestartet werden kann.

SupplementaryGroups=docker    
ExecStartPost=/bin/chmod 666 /var/run/docker.sock

3. Führen Sie nun die folgenden Befehle aus, um den Docker-Dienst neu zu starten und zu aktivieren. Dadurch können Sie den Docker-Dienst neu starten, um Fehler beim Ausführen von Docker-Befehlen zu vermeiden.

# Reloads all the Docker unit files and recreates the entire dependency tree.
sudo systemctl daemon-reload
# Restarts the Docker service
sudo systemctl start docker
# Enable the Docker to run on your computer.
sudo systemctl enable docker

4. Führen Sie schließlich hello-world erneut aus Docker-Image und prüfen Sie, ob Sie immer noch den Fehler "Berechtigung verweigert" erhalten.

Docker im Privilege-Modus ausführen

Zu guter Letzt steht auf der Liste der Behebung des Fehlers „Docker-Berechtigung verweigert“ die Ausführung von Docker im privilegierten Modus. Dadurch wird einem Docker-Container Root-Zugriff auf das System gewährt.

Das Ausführen von Docker im privilegierten Modus ist riskant und anfällig für Angriffe von Hackern. Seien Sie also vorsichtig und führen Sie Docker nur dann 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 die ID des Containers abzurufen, den Sie ausführen möchten.

sudo docker ls -a

2. Führen Sie als Nächstes docker inspect aus Befehl unten, um zu prüfen, ob sich der Container, den Sie ausführen möchten, bereits im privilegierten Modus befindet (--format='{{.HostConfig.Privileged}}' ). Ersetzen Sie CONTAINER_ID unten mit der tatsächlichen Container-ID, die Sie sich in Schritt 1 notiert haben.

docker inspect --format='{{.HostConfig.Privileged}}' CONTAINER_ID

Wenn sich der Container im privilegierten Modus befindet, gibt der Befehl ein true zurück Wert an die Konsole. 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 docker aus Befehl unten zum run den Docker-Container im privilegierten Modus (--privileged hello-world ).

sudo docker run --privileged hello-world

Schlussfolgerung

In diesem Tutorial haben Sie viele Möglichkeiten kennengelernt, das Docker-Problem Berechtigung verweigert zu lösen Fehler, vom Ausführen erhöhter Befehle zum Ausführen von Docker im privilegierten Modus.

Jetzt wissen Sie, wie Sie einen Fehler beim Erstellen von Docker-basierten Anwendungen beheben können. Vielleicht möchten Sie auch Ihre Docker-Images immer sauber halten?


Docker
  1. Fehlerbehebung bei Hardwareproblemen unter Linux

  2. Docker-Probleme in Ubuntu 20.04?

  3. So verwenden Sie den Docker-Inspect-Befehl

  4. So beheben Sie den Docker Permission Denied-Fehler unter Ubuntu

  5. Nützliche Beispiele für den Docker-ps-Befehl

20 nützliche Beispiele für Docker-Befehle unter Linux

eine Menge (Erlaubnis verweigert) in catalina.out

Composer:file_put_contents(./composer.json):Stream konnte nicht geöffnet werden:Berechtigung verweigert

docker.sock-Berechtigung verweigert

tcpdump:out.pcap:Zugriff verweigert

POSTFIX main.cf-Berechtigung verweigert