Docker ialah platform kontena sumber terbuka yang boleh membantu pembangun menjalankan aplikasi pada sistem pengendalian yang berbeza, memudahkan proses pembangunan dan penggunaan perisian. Walau bagaimanapun, dalam aplikasi yang dijalankan oleh Docker, sesetengah pengguna akan menghadapi masalah bahawa program tidak boleh menulis fail Situasi ini agak biasa di Docker. Artikel ini akan membincangkan sebab dan penyelesaian mengapa program tidak boleh menulis fail dalam Docker.
Dalam Docker, terdapat dua sebab utama program tidak boleh menulis fail: kebenaran baca sahaja sistem fail Docker dan kebenaran pengguna bagi bekas yang sedang berjalan.
Sistem fail Docker dibahagikan kepada dua bahagian: imej dan bekas. Imej ialah konsep asas Docker Ia adalah koleksi fail baca sahaja yang mengandungi semua fail dan maklumat konfigurasi yang diperlukan untuk menjalankan aplikasi. Apabila anda menggunakan Docker untuk memulakan bekas, Docker mencipta bekas baharu berdasarkan imej dan memberikan sistem fail boleh tulis kepada bekas. Oleh itu, sistem fail bekas boleh ditulis, manakala sistem fail imej adalah baca sahaja.
Apabila atur cara berjalan dalam bekas Docker dan cuba menulis fail dalam imej Docker, kerana sistem fail imej adalah baca sahaja, atur cara tidak boleh menulis fail pada masa ini program tidak boleh Masalah dengan menulis fail.
Sebab lain mengapa atur cara tidak boleh menulis fail ialah pengguna yang menjalankan bekas tidak mempunyai kebenaran menulis fail. Dalam Docker, setiap bekas berjalan dalam persekitaran terpencil, yang juga termasuk kebenaran sistem fail.
Kebenaran pengguna dalam bekas adalah berbeza daripada kebenaran mesin hos dalam sesetengah bekas tidak mempunyai kebenaran menulis fail Akibatnya, program tidak boleh menulis fail, menyebabkan ia gagal dijalankan. Dalam bekas Docker, menjalankan program sebagai pengguna root boleh menyelesaikan masalah ini, tetapi ini bukan pendekatan yang selamat.
Memandangkan masalah di atas, kita boleh menggunakan kaedah berikut untuk menyelesaikannya.
Kaedah biasa adalah untuk melekapkan fail atau direktori ke dalam bekas, supaya anda boleh memintas kebenaran baca sahaja sistem fail Docker dan menulis fail ke dalam sistem fail hos.
Kita boleh menggunakan arahan berikut untuk melekapkan fail atau direktori pada hos ke dalam bekas:
docker run -it -v /host/path:/container/path your_image
Dalam contoh ini, /host/path ialah direktori pada hos, / container /path ialah direktori dalam bekas. Apabila menulis fail dalam bekas, fail itu sebenarnya ditulis ke sistem fail hos.
Mengubah suai kebenaran pengguna kontena berjalan juga boleh menyelesaikan masalah kebenaran dalam bekas. Mula-mula, tambahkan pengguna bukan root pada Dockerfile dan ubah suai kebenaran pengguna bekas supaya program boleh dijalankan dalam bekas dengan kebenaran pengguna bukan root:
FROM your_base_image RUN groupadd -r your_user \ && useradd -r -g your_user your_user USER your_user
Kelebihan daripada kaedah ini ialah ia boleh mengelakkan isu Keselamatan yang disebabkan oleh pengguna root yang menjalankan program.
Anda boleh menetapkan nama pengguna dan nama kumpulan yang dijalankan dalam bekas Docker dalam Dockerfile untuk memastikan pengguna dalam bekas itu mempunyai kebenaran menulis fail:
FROM your_base_image RUN groupadd -r your_group && useradd -r -g your_group -d /home/your_user -m -c "Your User" your_user USER your_user
Nama pengguna dan kumpulan boleh diubah suai mengikut keperluan Pendekatan ini membolehkan program dijalankan sebagai pengguna bukan root dalam bekas dengan kebenaran menulis fail.
Dalam Docker, adalah masalah biasa bahawa atur cara tidak boleh menulis fail, yang mungkin menyebabkan atur cara tidak berjalan dengan betul. Kita boleh menyelesaikan masalah ini dengan memasang fail, mengubah suai kebenaran pengguna kontena atau menetapkan pengguna dalam Dockerfile. Dalam kerja sebenar, kita perlu mengambil kaedah yang sesuai mengikut situasi tertentu untuk memastikan program dalam kontena dapat berjalan seperti biasa.
Atas ialah kandungan terperinci Bincangkan sebab dan penyelesaian mengapa program tidak boleh menulis fail dalam Docker. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!