Verpassen Sie nicht die zeitlich begrenzten Angebote!

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

So beheben Sie den Fehler „Docker permission denied“ unter 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 verwendet diese Beschränkungen, um unbefugten Zugriff zu verhindern. Sie können jedoch Ihren Arbeitsablauf stören, wenn Sie Entwicklungsumgebungen unter Ubuntu einrichten.

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

  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, stellen Sie sicher, 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 sich diese Anleitung auf Ubuntu konzentriert, 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.

Um dieses Problem zu beheben, fügen Sie Ihren aktuellen Benutzer der Gruppe docker hinzu:

sudo usermod -aG docker $USER

Dieser Befehl aktualisiert Ihr Benutzerkonto, indem er es (-a) 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.

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

Nachdem Sie sich erneut angemeldet haben, bestätigen Sie, dass 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, 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 zeigt, dass root statt Ihres Benutzers Eigentümer der Dateien ist, ä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 stellt sicher, 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.

Wenn die Gruppe nicht docker ist oder die Berechtigungen abweichen, ändern Sie diese nicht manuell, indem Sie chmod 666 /var/run/docker.sock ausführen, 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.

Verlassen Sie sich stattdessen auf 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.

Um das Problem zu beheben, fügen Sie nach der COPY-Zeile in Ihrer Dockerfile 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 benötigen Sie häufig, 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. Um den Zugriff zu ermöglichen, übergeben Sie das Gerät beim Starten des Containers ausdrücklich mit dem Flag –device:

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

Wenn der Container weitergehende Berechtigungen, aber keinen vollständigen Gerätezugriff benötigt, 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

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

Docker mit systemctl neu starten:

sudo systemctl restart docker

Nachdem der Dienst neu gestartet wurde, überprüfen Sie die Behebung, 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.

Wenn der Fehler weiterhin auftritt, 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 der Arbeit mit Docker. So können Sie sich darauf konzentrieren, Anwendungen zu entwickeln und bereitzustellen, statt Einrichtungsprobleme zu beheben.

Als nächsten Schritt vertiefen Sie 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.