Jak naprawić doker: Wystąpił problem odmowy uprawnień


300

Zainstalowałem Docker na moim komputerze, na którym mam system operacyjny Ubuntu. Po tym, jak zainstalowałem dokera, kiedy uruchamiam

sudo docker run hello-world

Wszystko w porządku, ale chcę ukryć słowo, sudoaby skrócić polecenie.

Jeśli napiszę polecenie bez słowa sudo

docker run hello-world

Wyświetlane są następujące elementy:

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/containers/create: dial unix /var/run/docker.sock: connect: permission denied.See 'docker run --help'.

Stało się tak samo, kiedy próbuję zrobić

docker-compose up

Jak mogę to rozwiązać?



Odpowiedzi:


437

Jeśli chcesz uruchomić dokera jako użytkownik inny niż root, musisz dodać go do grupy dokerów.

  1. Utwórz grupę dokerów, jeśli nie istnieje
$ sudo groupadd docker
  1. Dodaj użytkownika do grupy dokerów.
$ sudo usermod -aG docker $USER
  1. Uruchom następujące polecenie lub Wyloguj się, zaloguj się ponownie i uruchom (to nie działa, może być konieczne ponowne uruchomienie komputera)
$ newgrp docker
  1. Sprawdź, czy doker można uruchomić bez rootowania
$ docker run hello-world

Zaczerpnięte z oficjalnej dokumentacji dokera: manage-docker-as-a-non-root-user


70
Nadal mam ten problem po wykonaniu wszystkich trzech kroków ”(
Anand

78
Musiałem zrestartować system Ubuntu 18, aby działał - po prostu wylogowanie i ponowne zalogowanie się nie działało.
heez

26
@heez ponowne uruchomienie mogło nie być wymagane, ponowne uruchomienie dokera było dla mnie wystarczające. sudo systemctl restart docker
Rattle

5
Należy pamiętać, że bycie w dockergrupie zasadniczo zapewnia dostęp do konta root , bez wymuszania regularnych zasad sudo i audytu. Aby uzyskać szczegółowe informacje i dyskusję, zobacz numer GitHub nr 9976 .
raehik

13
Ponowne uruchomienie dokera nie działało dla mnie, działało tylko ponowne uruchomienie (Ubuntu 18.04)
Joakim Tall

359

Po aktualizacji odmówiono mi pozwolenia. Wykonanie kroków po instalacji po instalacji „mkb” niczego nie zmieni, ponieważ mój użytkownik był już w grupie „dokerów”; Ponawiam to dwukrotnie w jakikolwiek sposób bez powodzenia.

Po godzinie wyszukiwania ostatecznie zadziałało następujące rozwiązanie:

sudo chmod 666 /var/run/docker.sock

Rozwiązanie pochodzi z Olszańska .

Wygląda na to, że uaktualnienie odtworzyło gniazdo bez wystarczającego pozwolenia dla grupy „dokerów”.

Problemy

Ten twardy chmod otwiera dziurę w zabezpieczeniach i po każdym ponownym uruchomieniu ten błąd zaczyna się od nowa i trzeba ponownie wykonać powyższe polecenie za każdym razem. Chcę rozwiązania raz na zawsze. Do tego masz dwa problemy:

  • 1) Problem zSystemD : Gniazdo zostanie utworzone tylko z właścicielem „root” i grupą „root”.

    Możesz sprawdzić pierwszy problem za pomocą tego polecenia:

    ls -l /lib/systemd/system/docker.socket
    

    Jeśli wszystko jest dobre, powinieneś zobaczyć root/docker„nie root/root”.

  • 2) Problem z graficznym logowaniem : /superuser/1348196/why-my-linux-account-only-belongs-to-one-group

    Możesz sprawdzić ten drugi problem za pomocą tego polecenia:

    groups
    

    Jeśli wszystko jest w porządku, powinieneś zobaczyć grupę dokerów na liście. Jeśli nie, wypróbuj polecenie

    sudo su $USER  -c groups
    

    jeśli widzisz, to grupa dokerów jest z powodu błędu.

Rozwiązania

Jeśli uda Ci się uzyskać obejście dla graficznego logowania, powinno to zrobić zadanie:

sudo chgrp docker /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

Ale jeśli nie możesz poradzić sobie z tym błędem, niezbyt złym rozwiązaniem może być:

sudo chgrp $USER /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

Działa to, ponieważ jesteś w środowisku graficznym i prawdopodobnie jedynym użytkownikiem na komputerze. W obu przypadkach potrzebujesz ponownego uruchomienia (lub an sudo chmod 666 /var/run/docker.sock)


2
jeśli doker został zainstalowany zgodnie z dokumentem na docs.docker.com/install , nigdy nie musisz wykonywać żadnych takich poleceń
Scott Stensland,

4
@ Scott Stensland Zainstalowałem dokera wiele razy „zgodnie z dokumentem”. Myślę, że problem wynika ze złej interakcji z innym niezidentyfikowanym pakietem.
Galigator,

1
W docker-in-docker niepoprawnie instalowałem /var/run/docker.sock z hosta bez :rokońcówki ... jak tylko dodałem, że jestem
gotowy

2
Używam Ubuntu 18 na EC2 - AWS i działał doskonale. Wszystkie pozostałe (sudo usermod -aG docker $ USER i inne rzeczy) nie działały
cherah30

1
Dzięki, naprawiono to w Ubuntu 18.04 LTS. przekształcanie i dodawanie do
groud

32
  1. Dodaj grupę dokerów
$ sudo groupadd docker
  1. Dodaj bieżącego użytkownika do grupy dokerów
$ sudo usermod -aG docker $USER
  1. Przełącz sesję na grupę dokerów
$ newgrp - docker
  1. Uruchom przykład, aby przetestować
$ docker run hello-world

newgrpKomenda poproszony o hasło i nie akceptuje mojego hasła użytkownika. Zamiast tego su - $USERpracował, aby uniknąć wylogowania / zalogowania.
bluenote10,

18
  1. Dodaj bieżącego użytkownika do dockergrupy
sudo usermod -aG docker $USER
  1. Zmień uprawnienia gniazda dokera, aby móc połączyć się z demonem dokera /var/run/docker.sock
sudo chmod 666 /var/run/docker.sock

15

Rozwiązuję ten błąd za pomocą polecenia:

$ sudo chmod 666 /var/run/docker.sock

9

Zawsze możesz spróbować Manage Docker as a non-root userakapitu w https://docs.docker.com/install/linux/linux-postinstall/ docs.

Po wykonaniu tej czynności, jeśli problem nadal występuje, możesz uruchomić następujące polecenie, aby go rozwiązać:

sudo chmod 666 /var/run/docker.sock

2
Uczynienie gniazda dokowania czytelnym lub zapisywalnym dla wszystkich (z chmod 666) jest katastrofą bezpieczeństwa ... Nigdy nie powinno się tego zalecać.
Aayla Secura


2

Aby rozwiązać ten problem, szukałem, gdzie jest zainstalowany doker i komponent dokowania. W moim przypadku dockerzostał zainstalowany /usr/bin/dockeri docker-composezostał zainstalowany na /usr/local/bin/docker-composeścieżce. Następnie piszę to w moim terminalu:

Aby dokować:

sudo chmod +x /usr/bin/docker

Do docker-compose:

sudo chmod +x /usr/local/bin/docker-compose

Teraz nie potrzebuję wpisywać w moich poleceniach dokera słowa sudo

/ ************************************************* ************************ /

ERRATA:

Najlepsze rozwiązanie tego problemu skomentował @mkasberg. Cytuję komentarz:

That might work, you might run into issues down the road. Also, it's a security vulnerability. You'd be better off just adding yourself to the docker group, as the docs say. sudo groupadd docker, sudo usermod -aG docker $USER. Docs: https://docs.docker.com/install/linux/linux-postinstall/

Wielkie dzięki!


2
To może zadziałać, możesz napotkać problemy. Jest to także luka w zabezpieczeniach. Lepiej byłoby po prostu dodać się do dockergrupy, jak mówią doktorzy. sudo groupadd docker, sudo usermod -aG docker $USER.
mkasberg

Cześć @masberg! Dzięki za komentarz! Zrobiłem erratę, aby zacytować twoje rozwiązanie. Wielkie dzięki!
Carlos Andres

1

lightdm i kwallet są dostarczane z błędem, który wydaje się nie przekazywać grup dodatkowych podczas logowania. Aby rozwiązać ten problem, ja również sudo usermod -aG docker $USERmusiałem się wypowiedzieć

auth optional pam_kwallet.so
auth optional pam_kwallet5.so

do

#auth optional pam_kwallet.so
#auth optional pam_kwallet5.so

w /etc/pam.d/lightdm przed restartem komputera , za Döcker grupie rzeczywiście mieć wpływ.

błąd: https://bugs.launchpad.net/lightdm/+bug/1781418 i tutaj: https://bugzilla.redhat.com/show_bug.cgi?id=1581495



1

Poważnie chłopaki. Nie dodawaj Dockera do swoich grup ani nie modyfikuj posixu gniazda (bez wzmacniającego SELinuksa), jest to prosty sposób na rootowanie privesc. Wystarczy dodać alias do .bashrc, jest to prostsze i bezpieczniejsze, ponieważ: alias dc = 'sudo docker'.


1

możesz wykonać następujące kroki, a to zadziała dla Ciebie:

  1. utwórz grupę dokerów sudo groupadd docker
  2. dodaj użytkownika do tej grupy sudo usermod -aG docker $USER
  3. wyświetl listę grup, aby upewnić się, że grupa dokerów została utworzona pomyślnie, uruchamiając to polecenie groups
  4. uruchom następujące polecenie, aby zmienić sesję grupy dokerów newgrp docker
  5. zmień własność grupy dla pliku docker.socksudo chown root:docker /var/run/docker.sock
  6. zmień własność katalogu .docker sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
  7. Wreszcie sudo chmod g+rwx "$HOME/.docker" -R

Po tym teście możesz uruchomić docker ps -a


Chciałem odpowiedzi, która nie wymaga ponownego uruchomienia. To była jedyna odpowiedź na to pytanie. „Trik” chowndotyczy pliku docker.sock.
Potherca

1

Po zainstalowaniu dokera, utworzeniu grupy „dokowania” i dodaniu do niej użytkownika, edytuj plik jednostki usługowej dokera:

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

Dodaj dwie linie do sekcji [Service]:

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

Zapisz plik (Ctrl-X, y, Enter)

Uruchom i włącz usługę Docker:

sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker

0

Po instalacji Docker na Centos. Podczas uruchamiania komendy poniżej wystąpił błąd.

[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.soc k/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

Zmień grupę i uprawnienia dla docker.socket

[centos@aiops-dev-cassandra3 ~]$ ls -l /lib/systemd/system/docker.socket
-rw-r--r--. 1 root root 197 Nov 13 07:25 /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chgrp docker /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chmod 666 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$ ls -lrth /var/run/docker.sock
srw-rw-rw-. 1 root docker 0 Nov 20 11:59 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$

Sprawdź, używając poniższego polecenia dokera

[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

[centos@aiops-dev-cassandra3 ~]$

-4

sudo chmod 666 /var/run/docker.sock

pomogło mi to, gdy pojawiał się błąd nawet podczas logowania do dokera. Ale teraz działa to całkiem dobrze w moim systemie.


1
Korzystanie z tej metody jest bardzo niepewne. Zapoznaj się z instrukcjami poinstalacyjnymi dotyczącymi komentarzy w głównym pytaniu.
Alejandro Visiedo García
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.