GNU/Linux >> Belajar Linux >  >> Linux

Mengapa docker container meminta Izin ditolak?

Saya memiliki masalah yang sama ketika membagikan nfs mount point sebagai volume menggunakan docker-compose. Saya dapat menyelesaikan masalah dengan:

    docker-compose up --force-recreate

Meskipun Anda menemukan masalahnya, ini dapat membantu orang lain.


Izin yang ditolak dalam wadah untuk direktori bersama mungkin karena fakta bahwa direktori bersama ini disimpan di perangkat. Secara default wadah tidak dapat mengakses perangkat apa pun. Menambahkan opsi $docker run --privileged mengizinkan penampung untuk mengakses semua perangkat dan melakukan panggilan Kernel. Ini tidak dianggap aman.

Cara yang lebih bersih untuk berbagi perangkat adalah dengan menggunakan opsi docker run --device=/dev/sdb (jika /dev/sdb adalah perangkat yang ingin Anda bagikan).

Dari halaman manual:

  --device=[]
      Add a host device to the container (e.g. --device=/dev/sdc:/dev/xvdc:rwm)

  --privileged=true|false
      Give extended privileges to this container. The default is false.

      By default, Docker containers are “unprivileged” (=false) and cannot, for example, run a Docker daemon inside the Docker container. This is because by default  a  container is not allowed to access any devices. A “privileged” container is given access to all devices.

      When  the  operator  executes  docker run --privileged, Docker will enable access to all devices on the host as well as set some configuration in AppArmor to allow the container nearly all the same access to the host as processes running outside of a container on the host.

Saya mendapat jawaban dari komentar di bawah:Mengapa docker container meminta Izin ditolak?

man docker-run memberikan jawaban yang tepat:

Sistem pelabelan seperti SELinux mengharuskan label yang tepat ditempatkan pada konten volume yang dipasang ke dalam wadah. Tanpa label, sistem keamanan mungkin mencegah proses yang berjalan di dalam kontainer menggunakan konten. Secara default, Docker tidak mengubah label yang ditetapkan oleh OS.

Untuk mengubah label dalam konteks wadah, Anda dapat menambahkan salah satu dari dua sufiks :z atau :Z ke mount volume. Sufiks ini memberi tahu Docker untuk memberi label ulang objek file pada volume bersama. Opsi z memberi tahu Docker bahwa dua kontainer berbagi konten volume. Akibatnya, Docker melabeli konten dengan label konten bersama. Label volume bersama memungkinkan semua wadah untuk membaca/menulis konten. Opsi Z memberi tahu Docker untuk memberi label konten dengan label pribadi yang tidak dibagikan. Hanya penampung saat ini yang dapat menggunakan volume pribadi.

Misalnya:

  docker run -it --name oracle_install -v /root/database:/tmp/install/database:z ...

Alasan lainnya adalah ketidaksesuaian dengan UID/GID. Ini sering muncul sebagai kemampuan untuk memodifikasi mount sebagai root tetapi tidak sebagai pengguna container

Anda dapat mengatur UID, jadi untuk wadah ubuntu yang berjalan sebagai ubuntu, Anda mungkin perlu menambahkan :uid=1000 (periksa dengan id -u ) atau setel UID secara lokal bergantung pada kasus penggunaan Anda.

uid=nilai dan gid=nilai

Tetapkan pemilik dan grup file di sistem file (default:uid=gid=0)

Ada blog bagus tentang ini di sini dengan contoh tmpfs ini

docker run \
       --rm \
       --read-only \
       --tmpfs=/var/run/prosody:uid=100 \
       -it learning/tmpfs

http://www.dendeer.com/post/docker-tmpfs/


Linux
  1. Mengapa Pengguna Root Membutuhkan Izin Sudo?

  2. Mengapa Mv(1) Menyalin Objek Jika Izin Untuk Bergerak Ditolak?

  3. Cara Keluar dari Kontainer Docker

  1. Mengapa `keluar &` Tidak Berfungsi?

  2. Pengantar Docker

  3. Cara Memperbaiki Docker Permission Denied Error di Ubuntu

  1. Mengapa Semua Orang Menggunakan Docker?

  2. Mengapa Deis dan apa itu?

  3. kesalahan perintah 'gambar buruh pelabuhan' - "Izin Ditolak"