Liman işçisi nasıl düzeltilir: İzin verilmedi sorunu var


308

Docker'ı Ubuntu işletim sistemi olan makineme kurdum. Docker'ı kurduktan sonra, çalıştırdığımda

sudo docker run hello-world

Her şey yolunda, ama sudokomutu daha kısa yapmak için kelimeyi gizlemek istiyorum .

Komutu kelime olmadan yazarsam sudo

docker run hello-world

Bu aşağıdakileri görüntüler:

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'.

Yapmaya çalıştığımda da aynı şey oldu

docker-compose up

Bunu nasıl çözebilirim?



Yanıtlar:


445

Docker'ı root olmayan bir kullanıcı olarak çalıştırmak istiyorsanız, docker grubuna eklemeniz gerekir.

  1. Varsa docker grubunu oluşturun
$ sudo groupadd docker
  1. Kullanıcıyı docker grubuna ekleyin.
$ sudo usermod -aG docker $USER
  1. Aşağıdaki komutu veya Oturumu Kapat'ı çalıştırın ve tekrar giriş yapın ve çalıştırın (bu işe yaramazsa önce makinenizi yeniden başlatmanız gerekebilir)
$ newgrp docker
  1. Docker'ın root olmadan çalıştırılıp çalıştırılamayacağını kontrol edin
$ docker run hello-world

Liman işçisinin resmi belgelerinden alınmıştır: root-kullanıcı-olmayanı olarak yönet


70
Her üç adımı da uyguladıktan sonra hala bu sorunum var "(
Anand

78
Çalışması için Ubuntu 18'de yeniden başlatmam gerekiyordu - sadece çıkış yapmak ve tekrar giriş yapmak işe yaramadı.
heez

26
@ heez yeniden başlatma gerekmeyebilir, liman işçisini yeniden başlatmak benim için yeterliydi. sudo systemctl restart docker
Çıngırak

5
dockerGrupta yer almanın, düzenli sudo politikaları ve denetimi uygulamadan kök erişimi sağladığını lütfen unutmayın . Ayrıntılar ve tartışma için GitHub sayı # 9976'ya bakın .
raehik

13
Docker yeniden başlatılıyor benim için işe yaramadı, sadece yeniden başlatma (Ubuntu 18.04)
Joakim Tall

361

Yükseltmeden sonra izin verilmedi. 'Mkb' yükleme sonrası adımlarının yapılması, hiçbir şey değiştirmedi çünkü kullanıcı zaten 'docker' grubundaydı; Tekrar denemem-iki kez başarı olmadan.

Bir arama saatinden sonra aşağıdaki çözüm son olarak işe yaradı:

sudo chmod 666 /var/run/docker.sock

Çözüm Olshansk'tan geldi .

Yükseltme, 'docker' grubu için yeterli izin olmadan soketi yeniden oluşturmuş gibi görünüyor.

sorunlar

Bu sabit chmod açık güvenlik deliği ve her yeniden başlatmadan sonra bu hata tekrar tekrar başlar ve her seferinde yukarıdaki komutu yeniden yürütmeniz gerekir. Bir kez ve herkes için bir çözüm istiyorum. Bunun için iki probleminiz var:

  • 1) SorunSystemD : Soket yalnızca 'root' sahibi ve 'root' grubu ile oluşturulacaktır.

    Bu ilk sorunu şu komutla kontrol edebilirsiniz:

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

    Her şey iyi ise, ' root/docker' değil ' root/root' görmelisiniz .

  • 2) Grafiksel Giriş ile ilgili problem : /superuser/1348196/why-my-linux-account-only-belongs-to-one-group

    Bu ikinci sorunu şu komutla kontrol edebilirsiniz:

    groups
    

    Her şey doğruysa listede docker grubunu görmelisiniz . Değilse komutu deneyin

    sudo su $USER  -c groups
    

    Eğer docker grubunu görüyorsanız , bu hata yüzünden.

Çözümler

Grafik girişi için geçici bir çözüm bulmayı başarırsanız, bu işin yapılması gerekir:

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

Ancak bu hatayı yönetemezseniz, o kadar da kötü olmayan bir çözüm bu olabilir:

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

Bu, grafiksel bir ortamda olduğunuz ve muhtemelen bilgisayarınızdaki tek kullanıcı olduğunuz için çalışır. Her iki durumda yeniden başlatma (veya bir ihtiyaç sudo chmod 666 /var/run/docker.sock)


2
docker dokümana göre docs.docker.com/install dizinine kurulmuşsa, bu tür komutlarla uğraşmanız gerekmez
Scott Stensland

4
@Scott Stensland Docker'ı 'doc başına' birçok kez yükledim. Bence sorun, tanımlanamayan başka bir paketle kötü bir etkileşimden kaynaklanıyor.
Galigator

1
Docker-in-docker, ben yanlış olmadan ana bilgisayardan /var/run/docker.sock montaj edilmiş :roen kısa sürede gitmem iyi olduğunu ekledi olarak ... ucunda
jakebrinkmann

2
EC2 - AWS'de ubuntu 18 kullanıyorum ve kayıtsızca çalıştım. Diğerleri (sudo usermod -aG docker $ USER ve diğer şeyler) işe yaramadı
cherah30

1
Teşekkürler, Ubuntu 18.04 LTS'de düzeltildi.
restating

32
  1. Liman işçisi grubu ekle
$ sudo groupadd docker
  1. Geçerli kullanıcınızı docker grubuna ekleyin
$ sudo usermod -aG docker $USER
  1. Oturumu docker grubuna geçir
$ newgrp - docker
  1. Test etmek için bir örnek çalıştırın
$ docker run hello-world

newgrpKomut bir parola sorulur ve benim kullanıcı şifresi kabul etmedi. Bunun yerine su - $USERoturumu kapatmaktan kaçınmak için çalıştı.
bluenote10

18
  1. Geçerli kullanıcıyı dockergruba ekle
sudo usermod -aG docker $USER
  1. Docker arka plan programına bağlanabilmek için docker soketinin izinlerini değiştirin /var/run/docker.sock
sudo chmod 666 /var/run/docker.sock

15

Bu hatayı şu komutla çözüyorum:

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



2

Bu sorunu gidermek için docker ve docker-compose'un yüklü olduğu yeri aradım. Benim durumumda, dockeryüklendiği /usr/bin/dockerve docker-composeiçinde yüklendiği /usr/local/bin/docker-composeyolu. Sonra bunu terminalime yazıyorum:

Liman işçisi için:

sudo chmod +x /usr/bin/docker

Alıcı docker-compose:

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

Şimdi komutlarıma docker kelimesini yazmaya ihtiyacım yok sudo

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

DÜZELTME:

Bu sorunun en iyi çözümü @mkasberg tarafından yorumlandı. Yorum yazıyorum:

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/

Çok teşekkürler!


2
Bu işe yarayabilir, yolda sorunlar yaşayabilirsiniz. Ayrıca, bu bir güvenlik açığıdır. dockerBelgelerin dediği gibi, kendinizi gruba eklemeniz daha iyi olur . sudo groupadd docker, sudo usermod -aG docker $USER.
mkasberg

Hey @mkasberg! Yorumun için teşekkürler! Çözümünüzü belirtmek için bir hata yaptım. Çok teşekkürler!
Carlos Andres

1

lightdm ve kwallet, girişte ek grupları geçmeyen bir hata ile gönderilir. Bu sorunu çözmek için, ben de, yanında sudo usermod -aG docker $USER, dışarı yorumlamak zorunda

auth optional pam_kwallet.so
auth optional pam_kwallet5.so

için

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

içinde /etc/pam.d/lightdm yeniden başlatmadan önce aslında hiç liman işçisi-grup için, etkisi vardır.

hata: https://bugs.launchpad.net/lightdm/+bug/1781418 ve burada: https://bugzilla.redhat.com/show_bug.cgi?id=1581495


1

bu komutu kullan

sudo usermod -aG docker $USER

sonra bu benim için çalıştı bilgisayarınızı yeniden başlatın.


1

Cidden çocuklar. Docker'ı gruplarınıza eklemeyin veya soket posixini (sertleştirici SELinux olmadan) değiştirmeyin, kök privesc yapmanın basit bir yoludur. Sadece .bashrc'nize bir takma ad ekleyin, daha basit ve daha güvenli: alias dc = 'sudo docker'.


1

bu adımları uygulayabilirsiniz ve bu sizin için işe yarar:

  1. liman işçisi grubu oluştur sudo groupadd docker
  2. kullanıcılarını bu gruba ekle sudo usermod -aG docker $USER
  3. bu komutu çalıştırarak docker grubunun başarıyla oluşturulduğundan emin olmak için grupları listeleyin groups
  4. docker grubu için oturumu değiştirmek için aşağıdaki komutu da çalıştırın newgrp docker
  5. docker.sock dosyası için grup sahipliğini değiştirmesudo chown root:docker /var/run/docker.sock
  6. .docker dizininin sahipliğini değiştirme sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
  7. en sonunda sudo chmod g+rwx "$HOME/.docker" -R

Bu testten sonra koşabilirsiniz docker ps -a


Yeniden başlatma gerektirmeyen bir cevap istedim. Bunu sağlayan tek cevap buydu. "Hile" chowndocker.sock dosyasıdır.
Potherca

1

Docker'ı yükledikten, 'docker' grubu oluşturup bu gruba kullanıcı ekledikten sonra, docker servis birimi dosyasını düzenleyin:

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

[Servis] bölümüne iki satır ekleyin:

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

Dosyayı kaydedin (Ctrl-X, y, Enter)

Docker hizmetini çalıştırın ve etkinleştirin:

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

0

Centos'a Docker Kurulumundan Sonra. Komutun altında çalışırken aşağıdaki hatayı aldım.

[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'.

Docker.socket için Grup ve İzin Değiştirme

[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 ~]$

Aşağıdaki docker komutunu kullanarak doğrulayın

[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

Bu docker giriş bile hata alıyorsanız bana yardımcı oldu Ama şimdi bu benim sistemde tamamen iyi çalışıyor.


1
Bu yöntemi kullanmak çok güvensizdir. Ana sorudaki yorumlarda verilen kurulum sonrası talimatları inceleyin.
Alejandro Visiedo García
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.