Bagaimana cara memperbaiki buruh pelabuhan: Mendapat izin ditolak


303

Saya menginstal Docker di mesin saya di mana saya memiliki OS Ubuntu. Setelah daripada saya menginstal buruh pelabuhan, ketika saya menjalankan

sudo docker run hello-world

Semua baik-baik saja, tetapi saya ingin menyembunyikan kata sudountuk membuat lebih pendek perintahnya.

Jika saya menulis perintah tanpa kata sudo

docker run hello-world

Itu menampilkan berikut ini:

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

Itu terjadi sama ketika saya mencoba untuk membuat

docker-compose up

Bagaimana saya bisa menyelesaikan ini?



Jawaban:


439

Jika Anda ingin menjalankan buruh pelabuhan sebagai pengguna non-root, Anda harus menambahkannya ke grup buruh pelabuhan.

  1. Buat grup buruh pelabuhan jika tidak ada
$ sudo groupadd docker
  1. Tambahkan pengguna Anda ke grup buruh pelabuhan.
$ sudo usermod -aG docker $USER
  1. Jalankan perintah atau Logout berikut dan login lagi dan jalankan (itu tidak berhasil, Anda mungkin perlu me-reboot mesin Anda terlebih dahulu)
$ newgrp docker
  1. Periksa apakah buruh pelabuhan dapat dijalankan tanpa root
$ docker run hello-world

Diambil dari dokumentasi resmi buruh pelabuhan: manage-docker-as-a-non-root-user


70
Saya masih memiliki masalah ini setelah menjalankan ketiga langkah "(
Anand

78
Saya harus reboot pada Ubuntu 18 agar berfungsi - cukup logout dan masuk kembali tidak bekerja.
heez

26
@ heez reboot mungkin tidak diperlukan, me-restart buruh pelabuhan sudah cukup bagi saya. sudo systemctl restart docker
Rattle

5
Harap dicatat bahwa berada di dockergrup pada dasarnya memberikan akses root , tanpa memberlakukan kebijakan & audit sudo reguler. Lihat masalah GitHub # 9976 untuk detail dan diskusi.
raehik

13
Memulai ulang buruh pelabuhan tidak berhasil untuk saya, hanya mem-boot ulang (Ubuntu 18.04)
Joakim Tall

360

Setelah upgrade saya mendapat izin yang ditolak. Melakukan langkah-langkah ' instal postingan ' mkb ' tidak memiliki perubahan apa pun karena pengguna saya sudah ada di grup' buruh pelabuhan '; Saya mencoba lagi-dua kali tanpa hasil.

Setelah satu jam pencarian, solusi berikut ini akhirnya berhasil:

sudo chmod 666 /var/run/docker.sock

Solusi datang dari Olshansk .

Sepertinya upgrade telah membuat ulang soket tanpa izin yang cukup untuk grup 'buruh pelabuhan'.

Masalah

Chmod keras ini membuka lubang keamanan dan setelah setiap reboot, kesalahan ini mulai lagi dan lagi dan Anda harus menjalankan kembali perintah di atas setiap kali. Saya ingin solusi sekali dan untuk semua. Untuk itu Anda memiliki dua masalah:

  • 1) Masalah denganSystemD : Soket hanya akan dibuat dengan pemilik 'root' dan grup 'root'.

    Anda dapat memeriksa masalah pertama ini dengan perintah ini:

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

    Jika semua ini baik, Anda akan melihat root/docker'tidak root/root'.

  • 2) Masalah dengan Login Grafis : /superuser/1348196/why-my-linux-account-only-belongs-to-one-group

    Anda dapat memeriksa masalah kedua ini dengan perintah ini:

    groups
    

    Jika semuanya benar, Anda harus melihat buruh pelabuhan grup dalam daftar. Jika tidak coba perintahnya

    sudo su $USER  -c groups
    

    jika Anda melihat maka grup buruh pelabuhan itu karena bug.

Solusi

Jika Anda berhasil mendapatkan solusi untuk login grafis, ini harus dilakukan:

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

Tetapi jika Anda tidak dapat mengelola bug ini, solusi yang tidak terlalu buruk adalah:

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

Ini berfungsi karena Anda berada dalam lingkungan grafis dan mungkin satu-satunya pengguna di komputer Anda. Dalam kedua kasus Anda membutuhkan reboot (atau an sudo chmod 666 /var/run/docker.sock)


2
jika buruh pelabuhan diinstal sesuai dokumen pada docs.docker.com/install maka Anda tidak perlu berurusan dengan perintah seperti itu
Scott Stensland

4
@Scott Stensland Saya telah menginstal buruh pelabuhan banyak waktu 'sesuai dokumen'. Saya pikir masalahnya berasal dari interaksi yang buruk dengan paket tidak dikenal lainnya.
Galigator

1
Di docker-in-docker, saya salah :ro
menginstal /var/run/docker.sock

2
Saya menggunakan ubuntu 18 pada EC2 - AWS dan bekerja sebelumnya. Semua yang lain (sudo usermod-aG docker $ USER dan hal-hal lain) tidak berfungsi
cherah30

1
Terima kasih, diperbaiki di Ubuntu 18.04 LTS. ulangan dan menambahkan groud tidak
Deepansh Parmani

32
  1. Tambahkan grup buruh pelabuhan
$ sudo groupadd docker
  1. Tambahkan pengguna Anda saat ini ke grup buruh pelabuhan
$ sudo usermod -aG docker $USER
  1. Beralih sesi ke grup buruh pelabuhan
$ newgrp - docker
  1. Jalankan contoh untuk menguji
$ docker run hello-world

The newgrpperintah diminta untuk password dan tidak menerima password user saya. Alih-alih su - $USERbekerja untuk menghindari keluar / masuk.
bluenote10

18
  1. Tambahkan pengguna saat ini ke dockergrup
sudo usermod -aG docker $USER
  1. Ubah izin soket buruh pelabuhan agar dapat terhubung ke daemon buruh pelabuhan /var/run/docker.sock
sudo chmod 666 /var/run/docker.sock

15

Saya mengatasi kesalahan ini dengan perintah:

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

9

Anda selalu dapat mencoba Manage Docker as a non-root userparagraf di https://docs.docker.com/install/linux/linux-postinstall/ docs.

Setelah melakukan ini juga jika masalah berlanjut, Anda dapat menjalankan perintah berikut untuk menyelesaikannya:

sudo chmod 666 /var/run/docker.sock

2
Membuat soket buruh pelabuhan dapat dibaca atau ditulis untuk semua orang (dengan chmod 666) adalah bencana keamanan ... Ini seharusnya tidak pernah direkomendasikan.
Aayla Secura


2

Untuk memperbaiki masalah itu, saya mencari di mana docker dan docker-compose saya terinstal. Dalam kasus saya, dockerdipasang di /usr/bin/dockerdan docker-composedipasang di /usr/local/bin/docker-composejalur. Kemudian, saya menulis ini di terminal saya:

Untuk buruh pelabuhan:

sudo chmod +x /usr/bin/docker

Kepada docker-compose:

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

Sekarang saya tidak perlu menulis perintah docker pada kata saya sudo

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

ERRATA:

Solusi terbaik dari masalah ini dikomentari oleh @mkasberg. Saya mengutip komentar:

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/

Terima kasih banyak!


2
Itu mungkin berhasil, Anda mungkin mengalami masalah di jalan. Juga, ini adalah kerentanan keamanan. Anda akan lebih baik hanya menambahkan diri Anda ke dockergrup, seperti yang dikatakan dokumen. sudo groupadd docker, sudo usermod -aG docker $USER.
mkasberg

Hei @kaskas! Terima kasih atas komentar Anda! Saya membuat errata untuk mengutip solusi Anda. Terima kasih banyak!
Carlos Andres

1

lightdm dan kwallet dikirimkan dengan bug yang tampaknya tidak lulus kelompok tambahan saat masuk. Untuk mengatasi ini, saya juga, di samping sudo usermod -aG docker $USER, harus berkomentar

auth optional pam_kwallet.so
auth optional pam_kwallet5.so

untuk

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

di /etc/pam.d/lightdm sebelum me-reboot , agar buruh pelabuhan benar-benar memiliki efek.

bug: https://bugs.launchpad.net/lightdm/+bug/1781418 dan di sini: https://bugzilla.redhat.com/show_bug.cgi?id=1581495



1

Serius teman-teman. Jangan menambahkan Docker di grup Anda atau memodifikasi soket posix (tanpa SELinux yang mengeras), ini adalah cara sederhana untuk membuat root privesc. Cukup tambahkan alias di .bashrc Anda, ini lebih sederhana dan lebih aman sebagai: alias dc = 'sudo docker'.


1

Anda dapat mengikuti langkah-langkah ini dan ini akan bekerja untuk Anda:

  1. buat grup buruh pelabuhan sudo groupadd docker
  2. tambahkan pengguna Anda ke grup ini sudo usermod -aG docker $USER
  3. daftar grup untuk memastikan bahwa grup buruh pelabuhan berhasil dibuat dengan menjalankan perintah ini groups
  4. jalankan perintah berikut juga untuk mengubah sesi untuk grup buruh pelabuhan newgrp docker
  5. ubah kepemilikan grup untuk file docker.socksudo chown root:docker /var/run/docker.sock
  6. ubah kepemilikan untuk direktori .docker sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
  7. akhirnya sudo chmod g+rwx "$HOME/.docker" -R

Setelah tes itu Anda bisa berlari docker ps -a


Saya menginginkan jawaban yang tidak memerlukan reboot. Ini adalah satu-satunya jawaban yang memberikan itu. "Trik" adalah ke chownfile docker.sock.
Potherca

1

Setelah Anda menginstal buruh pelabuhan, membuat grup 'buruh pelabuhan' dan menambahkan pengguna ke dalamnya, edit file unit layanan buruh pelabuhan:

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

Tambahkan dua baris ke bagian [Layanan]:

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

Simpan file (Ctrl-X, y, Enter)

Jalankan dan aktifkan layanan Docker:

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

0

Setelah Instalasi Docker di Centos. Saat menjalankan perintah di bawah ini saya mendapat kesalahan di bawah ini.

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

Ubah Grup dan Izin untuk 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 ~]$

Verifikasi dengan menggunakan perintah buruh pelabuhan di bawah ini

[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

ini membantu saya ketika saya mendapatkan kesalahan bahkan untuk masuk ke buruh pelabuhan Tapi sekarang ini berfungsi dengan baik di sistem saya.


1
Sangat tidak aman untuk menggunakan metode ini. Tinjau instruksi pasca pemasangan yang disediakan pada komentar di pertanyaan utama.
Alejandro Visiedo García
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.