docker.sock Berechtigung verweigert


73

Wenn ich versuche, einfache Docker-Befehle auszuführen, wie:

$ docker ps -a

Ich erhalte eine Fehlermeldung:

Berechtigung verweigert ... /var/run/docker.sock: connect: Berechtigung verweigert

Wenn ich Berechtigungen mit überprüfe

$ ls -al /var/run/

Ich sehe diese Zeile:

srw-rw---- root docker docker.sock

Ich folge also einem Rat aus vielen Foren und füge der Docker-Gruppe einen lokalen Benutzer hinzu:

$ sudo usermod -aG docker $USER

Aber es hilft nicht. Ich erhalte immer noch die gleiche Fehlermeldung. Wie kann ich es reparieren?


2
Haben Sie sich nach dieser Änderung erneut angemeldet? Die Änderung ist nicht in derselben Sitzung verfügbar. Funktioniert auch sudo docker psfür Sie?
Tarun Lalwani

Ich öffne ein neues Terminal und erhalte immer noch diese Fehlermeldungen.
Jacobian

sudo docker psfunktioniert. Aber ich muss mit Docker unter meinem lokalen Benutzer arbeiten.
Jacobian

Sie müssen den Docker-Daemon neu starten, sonst können Mitglieder der Docker-Gruppe den Docker-Daemon nicht steuern
Murmel

2
Nach dem Wechsel von Benutzern / Gruppen müssen Sie sich neu anmelden und nicht nur ein neues Terminal öffnen.
Sergius

Antworten:


154

Für diejenigen, die neu in der Shell sind, der Befehl:

$ sudo usermod -aG docker $USER

muss $USERin Ihrer Shell definiert haben . Dies ist häufig standardmäßig vorhanden, aber möglicherweise müssen Sie den Wert in einigen Shells auf Ihre Anmelde-ID festlegen.


Durch Ändern der Benutzergruppen werden vorhandene Anmeldungen, Terminals und Shells, die ein Benutzer geöffnet hat, nicht geändert. Um zu vermeiden, dass Sie sich erneut anmelden, können Sie einfach Folgendes ausführen:

$ newgrp docker

um Zugriff auf diese Gruppe in Ihrer aktuellen Shell zu erhalten.


Sobald Sie dies getan haben, hat der Benutzer effektiv Root-Zugriff auf dem Server. Tun Sie dies also nur für Benutzer, denen ein uneingeschränkter Sudo-Zugriff anvertraut ist.


Das hat bei mir nicht funktioniert, aber ich habe Namespaces verwendet. Ich musste benutzen --userns=host.
Mr00Anderson

Ich habe jeden anderen Trick in diesem Thread ausprobiert, bin den Dokumenten gefolgt, habe Docker auf eine neuere Version neu installiert, viele Male neu gestartet, alles, woran ich gedacht habe. Ich bin zwar in der Docker-Gruppe, aber die Standard-Shell erkennt dies nicht an (möglicherweise ein Problem mit einem Skript in meinem .profile?). Abgesehen vom Sudoing an den Root-Benutzer newgrpfunktionierte nur dieser Befehl.
Bruno Laturner

3
@BrunoLaturner Wenn Sie unter Ubuntu arbeiten, habe ich gehört, dass LightDM ein Problem verursacht, bei dem sekundäre Gruppen vom angemeldeten Benutzer gelöscht werden.
BMitch

2
@BMitch bist du in der NSA und spionierst mich aus? Das ist meine genaue Konfiguration und mein Fehler. Vielen Dank! Gelöst nach askubuntu.com/q/1057258/259660
Bruno Laturner

Verwandte Red Hat-Fehler für RHEL7 und Fedora 30: bugzilla.redhat.com/show_bug.cgi?id=1214104
Jeremy

22
  1. Stellen Sie sicher, dass Ihre $USERVariable gesetzt ist

    $ echo $USER
    
    $ sudo usermod -aG docker $USER
    
  2. Ausloggen

  3. Starten Sie nach der Anmeldung den Docker-Dienst neu

    $ sudo systemctl restart docker
    
    $ docker ps
    

3
Der Neustart des Docker-Daemons war sehr umfangreich. Vergessen Sie immer, dies zu tun, nachdem Sie einen Benutzer zur Docker-Gruppe hinzugefügt haben: \
Parth Patel

16

Grund: Die Fehlermeldung bedeutet, dass der aktuelle Benutzer nicht auf die Docker-Engine zugreifen kann, da der Benutzer nicht über genügend Berechtigungen verfügt, um auf den UNIX-Socket zuzugreifen und mit der Engine zu kommunizieren.

Schnelle Lösung:

  1. Führen Sie den Befehl mit sudo als root aus.

    sudo docker ps
    
  2. Ändern Sie die Berechtigungen von /var/run/docker.sock für den aktuellen Benutzer.

    sudo chown $USER /var/run/docker.sock
    

Achtung : Wenn Sie sudo chmod 777 /var/run/docker.sock ausführen, wird Ihr Problem gelöst, aber der Docker-Socket wird für alle Personen geöffnet, bei denen es sich um eine Sicherheitslücke handelt, auf die @AaylaSecura hingewiesen hat. Daher sollte es nicht verwendet werden, außer zu Testzwecken auf dem lokalen System.

Permanente Lösung:

Fügen Sie den aktuellen Benutzer zur Docker-Gruppe hinzu.

sudo usermod -a -G docker $USER

Hinweis: Sie müssen sich abmelden und erneut anmelden, damit die Änderungen wirksam werden.

In diesem Blog erfahren Sie mehr über die Verwaltung von Docker als Nicht-Root-Benutzer.


2
Wahrscheinlich verpassen Sie Stimmen, weil sich die Leute abmelden und dann vergessen, zurück zu kommen und Lols zu stimmen.
John Mee

Ich wette, sie verpassen die Upvotes, weil die "Schnellkorrektur" eine Sicherheitskatastrophe ist ... Die Docker-Buchse sollte niemals für die Welt zugänglich sein ...
Aayla Secura

1
@AaylaSecura Ja, du hast recht. Ich hatte es als schnelle Lösung hinzugefügt, aber es ist wieder eine schlechte Praxis. Ich habe es jetzt in der Antwort geändert. Fühlen Sie sich frei zu kommentieren, wenn Sie denken, dass es verbessert werden kann.
Nitish

Dies war die Lösung, die für mich funktioniert hat ... danke !!!, der Besitz der Datei docker.sock war root, so dass keine Abmeldung dies jemals beheben würde.
Carlos

4

Wie bereits im Kommentar erwähnt, werden die Änderungen erst nach Ihrer erneuten Anmeldung übernommen. Wenn Sie eine SSH durchgeführt und ein neues Terminal geöffnet hätten, hätte dies in einem neuen Terminal funktioniert

Da Sie jedoch die GUI verwendet und das neue Terminal geöffnet haben, wurden die Änderungen nicht übernommen. Aus diesem Grund ist der Fehler nicht behoben

Der folgende Befehl hat seinen Job gemacht, es wurde nur ein erneuter Login verpasst

sudo usermod -aG docker $USER

1

Da mein Benutzer ein AD-Benutzer ist, muss ich den AD-Benutzer zur lokalen Gruppe hinzufügen, indem ich die Datei / etc / group manuell bearbeite. Leider scheinen die adduser-Befehle nicht nsswitch-fähig zu sein und erkennen keinen Benutzer, der nicht lokal definiert ist, wenn jemand zu einer Gruppe hinzugefügt wird.

Starten Sie dann / etc / group neu oder aktualisieren Sie sie. Jetzt können Sie Docker ohne Sudo verwenden.

Grüße.


1

Als Root-Benutzer in den Container schlagen docker exec -it --user root <dc5> bash

Erstellen Sie eine Docker-Gruppe, falls diese noch nicht erstellt wurde groupadd -g 999 docker

Benutzer zur Docker-Gruppe hinzufügen usermod -aG docker jenkins

Berechtigungen ändern chmod 777 /var/run/docker.sock


0

Sie müssen Docker als Nicht-Root-Benutzer verwalten. So erstellen Sie die Docker-Gruppe und fügen Ihren Benutzer hinzu:

  1. Erstellen Sie die Docker-Gruppe.

    $ sudo groupadd docker

  2. Fügen Sie Ihren Benutzer zur Docker-Gruppe hinzu.

    $ sudo usermod -aG docker $USER

  3. Melden Sie sich ab und wieder an, damit Ihre Gruppenmitgliedschaft neu bewertet wird.

Beim Testen auf einer virtuellen Maschine muss die virtuelle Maschine möglicherweise neu gestartet werden, damit die Änderungen wirksam werden.

Melden Sie sich in einer Linux-Desktopumgebung wie X Windows vollständig von Ihrer Sitzung ab und dann wieder an.

Unter Linux können Sie auch den folgenden Befehl ausführen, um die Änderungen an Gruppen zu aktivieren:

$ newgrp docker

  1. Stellen Sie sicher, dass Sie Docker-Befehle ohne sudo ausführen können.

    $ docker run hello-world

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.