Verpassen Sie nicht die zeitlich begrenzten Angebote!

So beheben Sie den Fehler „Docker permission denied“ auf Ubuntu

So beheben Sie den Fehler „Docker permission denied“ auf Ubuntu

Der Docker-Fehler „permission denied“ (Zugriff verweigert) tritt in der Regel auf, wenn Ihr Benutzerkonto keine Berechtigung hat, auf den Docker-Daemon-Socket oder auf erforderliche Dateien und Verzeichnisse zuzugreifen.

Docker setzt diese Beschränkungen ein, um unbefugten Zugriff zu verhindern. Sie können jedoch Ihren Arbeitsablauf stören, wenn Sie Entwicklungsumgebungen auf Ubuntu einrichten.

Befolgen Sie diese sechs bewährten Lösungen, um den Docker-Fehler „permission denied“ zu beheben:

  1. Ändern Sie die Benutzergruppenmitgliedschaft. Fügen Sie Ihr Benutzerkonto der Gruppe docker hinzu, damit Sie Docker-Befehle ohne sudo ausführen können.
  2. Passen Sie die Eigentumsrechte von Dateien und Verzeichnissen an. Aktualisieren Sie die Eigentumsrechte der Konfigurationsdateien und eingehängten Volumes, damit die Docker Engine Daten lesen und schreiben kann.
  3. Überprüfen Sie die Socket-Berechtigungen. Prüfen Sie die Berechtigungen des Docker-Unix-Sockets, um sicherzustellen, dass der Kommunikationskanal nicht eingeschränkt ist.
  4. Aktualisieren Sie die Ausführungsrechte für Skripte. Stellen Sie sicher, dass Dockerfile-Befehle und ENTRYPOINT-Skripte über Ausführungsrechte verfügen, um Startfehler von Containern zu vermeiden.
  5. Konfigurieren Sie den Hardwarezugriff. Erlauben Sie Containern den Zugriff auf bestimmte Geräte, z. B. USB-Geräte oder GPUs, um hardwarebezogene Berechtigungsprobleme zu beheben.
  6. Starten Sie den Docker-Daemon neu. Starten Sie den Docker-Dienst und Ihre Benutzersitzung neu, um alle Berechtigungs- und Gruppenänderungen anzuwenden.

Voraussetzungen

Bevor Sie den Docker-Fehler „permission denied“ beheben, sollten Sie sicherstellen, dass Ihr Linux-System die Voraussetzungen für das Ändern administrativer Einstellungen erfüllt.

  • Administrativer Zugriff. Sie benötigen sudo– oder Root-Rechte, um Benutzergruppen und Dateiberechtigungen zu ändern.
  • Überprüfung der Benutzergruppen. Prüfen Sie Ihre aktuellen Gruppenmitgliedschaften, indem Sie den Befehl groups $USER ausführen.
  • Docker-Installation. Stellen Sie sicher, dass Docker installiert ist und ausgeführt wird, indem Sie docker –version ausführen.

Obwohl diese Anleitung für Ubuntu verfasst wurde, gilt sie auch für die meisten Debian-basierten Distributionen.

1. Fügen Sie Ihren Benutzer zur docker-Gruppe hinzu

Die häufigste Ursache für den Fehler „permission denied“ ist, dass Ihr Benutzerkonto nicht zur docker-Gruppe gehört.

Standardmäßig läuft der Docker-Daemon als root-eigener Systemdienst. Nur Benutzer in der Gruppe docker können mit ihm kommunizieren, ohne sudo zu verwenden.

Fügen Sie zur Behebung dieses Problems Ihren aktuellen Benutzer der Gruppe docker hinzu:

sudo usermod -aG docker $USER

Dieser Befehl aktualisiert Ihr Benutzerkonto (-a), indem er es der angegebenen Gruppe (-G) hinzufügt. Dadurch erhält Ihr Benutzer die Berechtigung, auf den Docker-Daemon-Socket zuzugreifen und Docker-Befehle direkt auszuführen.

Melden Sie sich ab und anschließend wieder an, damit die neue Gruppenmitgliedschaft wirksam wird.

Sehen Sie nach Ihrer erneuten Anmeldung nach, ob die Änderung wirksam geworden ist:

id -nG

Die Ausgabe sollte docker in der Liste der Gruppen enthalten.

Wenn Sie sofort testen möchten, ohne sich abzumelden, dann führen Sie Folgendes aus:

newgrp docker

Dieser Befehl wendet die Gruppenänderung nur auf Ihre aktuelle Terminal-Sitzung an.

2. Beheben Sie Probleme mit Datei- und Verzeichnisberechtigungen

Wenn das Hinzufügen Ihres Benutzers zur Gruppe das Problem nicht behebt, können falsche Berechtigungen für Konfigurationsdateien oder eingehängte Volumes den Fehler verursachen.

Docker benötigt Lese- und Schreibzugriff auf seine Konfigurationsdateien, insbesondere auf config.json.

Prüfen Sie zunächst die Berechtigungen Ihres lokalen Docker-Konfigurationsverzeichnisses:

ls -l ~/.docker/

Wenn die Ausgabe anzeigt, dass statt Ihres Benutzers root Eigentümer der Dateien ist, dann ändern Sie den Eigentümer mit dem Befehl chown:

sudo chown -R "$USER":"$USER" "$HOME/.docker"

Dieser Befehl ändert rekursiv den Besitz des Verzeichnisses .docker und seiner Inhalte auf Ihren aktuellen Benutzer.

Beheben Sie als Nächstes Berechtigungsprobleme im Zusammenhang mit eingehängten Volumes. Wenn Sie ein Host-Verzeichnis in einen Container einbinden, benötigt der Benutzer im Container die Berechtigung, aus diesem Verzeichnis zu lesen oder in dieses zu schreiben.

Wenn Sie beispielsweise einen Container mit einem Volume-Mount ausführen:

docker run -v ~/data:/app/data ubuntu

Stellen Sie sicher, dass das Host-Verzeichnis ~/data die korrekten Berechtigungen besitzt. Sie können dem Benutzer (u) Lese- und Schreibzugriff mit folgendem chmod-Befehl gewähren:

chmod u+rw ~/data

Dies sorgt dafür, dass der Benutzer, dem das Verzeichnis gehört, über ausreichende Berechtigungen verfügt, um Daten innerhalb des eingehängten Volumes zu verwalten.

3. Überprüfen Sie die Berechtigungen des Docker-Sockets

Der Docker-Daemon kommuniziert über einen Unix-Socket unter /var/run/docker.sock. Wenn dieser Socket falsche Berechtigungen hat, kann der Docker-Client keine Befehle an den Daemon senden.

Überprüfen Sie die aktuellen Socket-Berechtigungen:

ls -l /var/run/docker.sock

Sie sollten eine Ausgabe sehen, die der folgenden ähnlich ist:

srw-rw---- 1 root docker 0 Dec 18 10:00 /var/run/docker.sock

Diese Ausgabe zeigt, dass der Socket root gehört und die Gruppe docker Lese- und Schreibzugriff hat. Wenn Sie diese Ausgabe sehen und Ihr Benutzer zur docker-Gruppe gehört, ist die Socket-Konfiguration korrekt.

Sollte die Gruppe nicht docker sein oder die Berechtigungen abweichen, dann ändern Sie diese nicht manuell durch die Ausführung von chmod 666 /var/run/docker.sock, insbesondere nicht in Produktionsumgebungen.

Dieser Befehl stellt ein erhebliches Sicherheitsrisiko dar, da er allen Systembenutzern Zugriff auf den Docker-Daemon gewährt und ihnen damit faktisch Root-Rechte auf dem Host einräumt.

Beheben Sie dies stattdessen über die Gruppenmitgliedschaft, indem Sie Ihren Benutzer zur docker-Gruppe hinzufügen. Der Docker-Daemon setzt beim Start automatisch die korrekten Socket-Berechtigungen.

4. Korrigieren Sie die Berechtigungen der Dockerfile oder des ENTRYPOINT-Skripts

Ein Docker-Fehler „permission denied“ kann auch innerhalb eines Containers auftreten, wenn dem Entrypoint-Skript die Ausführungsrechte fehlen.

Dieses Problem tritt häufig auf, wenn Sie Skripte von einem Nicht-Linux-Dateisystem wie Windows in den Docker-Build-Kontext verschieben. In diesen Fällen kann das Ausführungsbit verloren gehen.

Wenn dies geschieht, kann der Container nicht starten, weil er das in der ENTRYPOINT– oder CMD-Anweisung definierte Skript nicht ausführen kann.

Fügen Sie zur Behebung des Problems in Ihrer Dockerfile nach der COPY-Zeile eine RUN-Anweisung hinzu. Dadurch werden dem Skript Ausführungsrechte erteilt:

RUN chmod +x /usr/local/bin/entrypoint.sh

Dies stellt sicher, dass das Skript unabhängig von seinen Berechtigungen auf dem Host-System ausführbar bleibt. Diesen Schritt ist oft nötig, wenn Sie benutzerdefinierte Images erstellen, die auf Startskripte angewiesen sind.

5. Gewähren Sie Docker-Containern Zugriff auf Geräte

Wenn ein Container mit Hardwaregeräten wie einem USB-Laufwerk, einer Webcam oder einer GPU interagieren muss, kann bei einem Gerätepfad wie /dev/ttyUSB0 ein „permission denied“-Fehler auftreten.

Standardmäßig werden Container isoliert ausgeführt und können nicht auf Host-Geräte zugreifen. Übermitteln Sie das Gerät zur Gewährleistung des Zugriffs beim Starten des Containers ausdrücklich mit dem Flag –device:

docker run --device=/dev/ttyUSB0 my-image

Sollte der Container weitergehende Berechtigungen, aber keinen vollständigen Gerätezugriff benötigen, dann gewähren Sie spezifische Linux-Capabilities mit dem Flag –cap-add:

docker run --cap-add=SYS_ADMIN my-image

Dieser Ansatz folgt dem Prinzip der geringsten Privilegien – gewähren Sie dem Container nur die Berechtigungen, die er tatsächlich benötigt. Zu den gängigen Capabilities gehören NET_ADMIN für die Netzwerkkonfiguration und SYS_PTRACE für das Debugging.

Wenn bestimmte Geräte oder Capabilities nicht ausreichen, können Sie das Flag –privileged verwenden:

docker run --privileged my-image

Diese Option gewährt dem Container vollen Zugriff auf alle Host-Geräte und deaktiviert die meisten Sicherheitsisolierungsfunktionen.

In diesem Modus gestartete Container können Root-Rechte auf dem Hostsystem erlangen. Verwenden Sie –privileged nur in vertrauenswürdigen lokalen Entwicklungsumgebungen oder wenn keine sichereren Alternativen anwendbar sind.

Bevorzugen Sie für Produktions-Workloads stets –device für spezifische Hardware oder –cap-add für spezifische Capabilities.

6. Starten Sie Docker neu und testen Sie Ihre Einrichtung

Starten Sie den Docker-Dienst neu, nachdem Sie Änderungen an Benutzergruppen oder Berechtigungen vorgenommen haben, damit der Daemon die aktualisierte Konfiguration erkennt.

Docker mit systemctl neu starten:

sudo systemctl restart docker

Überprüfen Sie nach Neustart der Dienste, ob die Behebung erfolgreich war, indem Sie den Standard-hello-world-Container ohne sudo ausführen:

docker run hello-world

Wenn das Image erfolgreich heruntergeladen und ausgeführt wird und eine Willkommensmeldung anzeigt, haben Sie das Berechtigungsproblem behoben.

Sollte der Fehler weiterhin auftreten, dann starten Sie das gesamte System neu, um sicherzustellen, dass alle Gruppenmitgliedschaften und Sitzungsänderungen wirksam werden:

sudo reboot

Was sollten Sie als Nächstes in Docker lernen?

Da Ihre Docker-Installation jetzt ohne Berechtigungsfehler funktioniert, können Sie sicher und zuverlässig mit Containern arbeiten.

Das Beheben von Umgebungsproblemen ist ein wesentlicher erster Schritt bei dem Einsatz von Docker. So können Sie sich darauf konzentrieren, Anwendungen zu entwickeln und bereitzustellen, statt Einrichtungsprobleme zu beheben.

Vertiefen Sie als nächsten Schritt Ihr Verständnis der grundlegenden Docker-Konzepte, indem Sie das vollständige Docker-Tutorial lesen. Es umfasst Image-Verwaltung, Container-Lebenszyklen, Docker Compose, Datenpersistenz und Container-Netzwerke.

Alle Tutorial-Inhalte auf dieser Website unterliegen Hostingers strengen redaktionellen Standards und Normen.

Author
Erstellt von

Faradilla Ayunindya

Faradilla, auch bekannt als Ninda, ist Content Marketing Specialist bei Hostinger mit über fünf Jahren Erfahrung und einem zehnjährigen Hintergrund als Linguistin. Sie möchte Technologie für alle zugänglich machen, indem sie komplexe Anleitungen in klare und leicht verständliche Schritt-für-Schritt-Guides verwandelt. In ihrer Freizeit interessiert sie sich für Biowissenschaften oder schaut gerne lustige Tiervideos. Vernetzen Sie sich mit ihr auf LinkedIn.

Was unsere Kunden sagen

Kommentar schreiben

Please fill the required fields.Bitte akzeptieren Sie die Datenschutzklausel.Bitte füllen Sie die erforderlichen Felder aus und akzeptieren Sie die Datenschutzklausel.

Thank you! Your comment has been successfully submitted. It will be approved within the next 24 hours.