Bagaimana mengatasi masalah izin untuk buruh pelabuhan di ubuntu?

35

Saya telah menginstal buruh pelabuhan seperti yang dijelaskan di sini . Saya menggunakan Ubuntu Trusty 14.04 (LTS) (64-bit) . Semuanya selama instalasi dengan baik. Perintah $ sudo docker run -i -t ubuntu /bin/bashjuga selesai dengan baik (setelah saya mengetik "keluar" di konsol terbuka. Tapi ketika saya mencoba melakukan sesuatu yang lain, saya mendapat "izin ditolak". Misalnya:

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

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

` docker info`

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

Bagaimana cara mengatasinya? Saya mencari di Google tentang masalah tetapi saya tidak dapat menemukan solusi untuk kasus saya.

ceri
sumber

Jawaban:

50

Tambahkan grup buruh pelabuhan jika belum ada.

$ sudo groupadd docker

Tambahkan pengguna yang terhubung ${USER}ke grup buruh pelabuhan. Ubah nama pengguna agar cocok dengan pengguna pilihan Anda.

$ sudo gpasswd -a ${USER} docker

Mulai ulang daemon Docker:

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

Anda harus keluar dan masuk lagi untuk memperbarui izin grup. Untuk menghindarinya, Anda dapat beralih ke subkulit sebagai berikut. Atau gunakan salah satu trik lain yang disebutkan dalam pertanyaan ini :

su - $USER
pyprism
sumber
14
Saya harus reboot untuk mendapatkan efek ini.
obsoleter
8
Tidak perlu reboot, cukup logout dan login.
Ajay Gautam
2
Logout melakukannya, bahkan ketika exec $SHELLtidak. Saya tertarik untuk mengetahui dari mana mekanisme keluar menyelesaikan masalah ini. Ini bukan windows!
Darth Egregious
1
Di Fedora, pertama-tama Anda harus mengedit /etc/selinux/configdan meletakkan SELINUX=disabled, lalu reboot Linux
Junior M
1
Penjelasan hebat! Kamu yang terbaik! :)
Francis Rodrigues
5

Jika Anda menjalankan CentOS atau RedHat, Anda mungkin harus menonaktifkan SELinux terlebih dahulu dengan menjalankan:

setenforce 0

Eiter restart setelah itu untuk mengaktifkan kembali SELinux atau menjalankan setenforce 1.

joelschmid
sumber
4

Saya memiliki masalah yang sama, karena selinux. Anda dapat memeriksa apakah selinux adalah penyebabnya dengan:

  1. Menonaktifkan selinux: setenforce 0
  2. Coba lagi

Jika menonaktifkan selinux memecahkan masalah Anda, itu bukan alasan untuk membiarkannya dinonaktifkan:

  1. Aktifkan selinux: setenforce 1
  2. Izinkan koneksi soket dalam konfigurasi selinux: setsebool docker_connect_any true
  3. Jalankan wadah Docker Anda dengan --priviledgedopsi
Paul Podgorsek
sumber
3

Saya berasumsi, nama pengguna Anda sudah dalam grup buruh pelabuhan. Untuk memeriksanya, berikan perintah di bawah ini.

id -nG

Jika tidak, Anda perlu menambahkan pengguna Anda ke grup buruh pelabuhan dengan perintah di bawah ini.

sudo groupadd docker
sudo usermod -aG docker $USER

Ketika Anda menjalankan perintah sudo systemctl start docker, itu menciptakan proses buruh pelabuhan. Proses buruh pelabuhan itu berisi dockerddaemon thread. Perintah ini juga membuat docker.socksoket Unix standar . The docker.socksocket terus didengarkan oleh dockerdbenang daemon. Ini membuat Anda dapat melakukan IPC tingkat kernel dengan docker.pidproses. Untuk dapat menggunakan soket buruh pelabuhan ini, Anda harus memiliki izin yang sesuai dari level proses ( docker.pid) dan level file ( docker.sock). Jadi, menjalankan dua perintah di bawah ini akan menyelesaikan masalah Anda. sudo chmod a+rwx /var/run/docker.sock # You can provide just execute permission sudo chmod a+rwx /var/run/docker.pid

Uddhav Gautam
sumber
1

Menurut versi saat ini kami tidak perlu menambahkan grup docker.
Itu ada secara otomatis oleh instalasi. Anda dapat memeriksa menggunakan perintah:

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

Jadi untuk mengelola Docker sebagai pengguna non-root , cukup tambahkan pengguna Anda ke grup buruh pelabuhan lalu keluar dan masuk kembali sehingga keanggotaan grup Anda dievaluasi kembali:

$ sudo usermod -aG docker $USER
$ logout

Untuk memeriksanya saat Anda masuk kembali

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

Anda bahkan mungkin memaksa untuk menggunakan GROUP:dockersebagai grup utama baru Anda:

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

Untuk memeriksanya saat Anda masuk kembali

$ id
uid=1001(<user_name>) gid=999(docker) groups=999(docker),...
Chetabahana
sumber