Jak rozwiązać problemy z uprawnieniami do dokera w Ubuntu?


35

Zainstalowałem dokera zgodnie z opisem tutaj . Używam Ubuntu Trusty 14.04 (LTS) (64-bit) . Wszystko podczas instalacji było w porządku. Również polecenie $ sudo docker run -i -t ubuntu /bin/bashkończy się dobrze (po wpisaniu „exit” w otwartej konsoli. Ale kiedy próbuję zrobić coś innego, dostaję „odmowę dostępu”. Na przykład:

`$ sudo docker run -d -P training/webapp python app.py`

Reuslts in Post http:///var/run/docker.sock/v1.12/containers/create: dial unix /var/run/docker.sock: permission denied

` docker info`

Reuslts in Get http:///var/run/docker.sock/v1.12/info: dial unix /var/run/docker.sock: permission denied

Jak to rozwiązać? Przejrzałem Google na temat problemu, ale nie mogę znaleźć rozwiązania dla mojej sprawy.

Odpowiedzi:


50

Dodaj grupę dokerów, jeśli jeszcze nie istnieje.

$ sudo groupadd docker

Dodaj podłączonego użytkownika ${USER}do grupy dokerów. Zmień nazwę użytkownika, aby pasowała do preferowanego użytkownika.

$ sudo gpasswd -a ${USER} docker

Uruchom ponownie demona Docker:

$ sudo service docker restart # Or docker.io for older versions
# 18.04+ with snap:
$ sudo systemctl restart snap.docker.dockerd

Powinieneś się wylogować i zalogować ponownie, aby zaktualizować uprawnienia grupy. Aby tego uniknąć, możesz przejść do podpowłoki w następujący sposób. Lub użyj dowolnej innej sztuczki wymienionej w tym pytaniu :

su - $USER

14
Musiałem zrestartować komputer, aby to zadziałało.
przestarzały

8
Nie musisz restartować się, po prostu wyloguj się i zaloguj.
Ajay Gautam,

2
Wylogowanie to zrobiło, nawet jeśli exec $SHELLnie. Chciałbym wiedzieć, za pomocą którego mechanizmu wylogowanie rozwiązało problem. To nie jest Windows!
Darth Egregious,

1
W Fedorze najpierw musisz edytować /etc/selinux/configi umieścić SELINUX=disabled, a następnie ponownie uruchomić Linux
Junior M

1
Świetne wyjaśnienie! Jesteś najlepszy! :)
Francis Rodrigues

5

Jeśli korzystasz z CentOS lub RedHat, być może będziesz musiał najpierw wyłączyć SELinux, uruchamiając:

setenforce 0

Eiter zrestartuje się później, aby ponownie włączyć SELinux lub uruchomić setenforce 1.


4

Miałem ten sam problem z powodu selinux. Możesz sprawdzić, czy winowajcą jest selinux:

  1. Wyłączanie selinux: setenforce 0
  2. Ponowna próba

Jeśli wyłączenie selinux rozwiązało problem, to nie jest powód, aby pozostawić go wyłączonym:

  1. Włącz selinux: setenforce 1
  2. Zezwól na połączenie przez gniazdo w konfiguracji selinux: setsebool docker_connect_any true
  3. Uruchom kontener Docker z --priviledgedopcją

3

Zakładam, że twoja nazwa użytkownika jest już w grupie dokerów. Aby to sprawdzić, wydaj poniższe polecenie.

id -nG

Jeśli nie, musisz dodać użytkownika do grupy dokerów, wykonując poniższe polecenie.

sudo groupadd docker
sudo usermod -aG docker $USER

Wykonanie polecenia sudo systemctl start dockerpowoduje utworzenie procesu dokowania. Ten proces dokera zawiera dockerdwątek demona. Polecenie tworzy również domyślne docker.sockgniazdo Unix. docker.sockGniazdo ciągły słuchały dockerddemon wątku. Dzięki temu można wykonywać docker.pidproces IPC na poziomie jądra . Aby móc korzystać z tego gniazda dokowania, musisz mieć odpowiednie uprawnienia z poziomu procesu ( docker.pid) i poziomu pliku ( docker.sock). Wykonanie poniżej dwóch poleceń powinno rozwiązać Twój problem. sudo chmod a+rwx /var/run/docker.sock # You can provide just execute permission sudo chmod a+rwx /var/run/docker.pid


1

W obecnej wersji nie musimy dodawać grupy docker.
Istnieje automatycznie podczas instalacji. Możesz to sprawdzić za pomocą polecenia:

$ sudo groupadd docker
groupadd: group 'docker' already exists

Aby więc zarządzać Dockerem jako użytkownik inny niż root , po prostu dodaj go do grupy dokerów, a następnie wyloguj się i zaloguj ponownie, aby ponownie ocenić członkostwo w grupie:

$ sudo usermod -aG docker $USER
$ logout

Aby to sprawdzić po ponownym zalogowaniu

$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

Możesz nawet wymusić użycie GROUP:dockerjako nowej grupy podstawowej:

$ sudo chown "$USER":"docker" /home/"$USER"/.docker -R
$ sudo chmod g+rwx "$HOME/.docker" -R
$ sudo usermod -g docker ${USER}
$ logout

Aby to sprawdzić po ponownym zalogowaniu

$ id
uid=1001(<user_name>) gid=999(docker) groups=999(docker),...
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.