Saya sedang membangun gambar Docker untuk Symfony
aplikasi saya dan saya perlu memberikan izin kepada server apache untuk menulis ke folder cache dan log
#Dockerfile
FROM php:7-apache
RUN apt-get update \
&& apt-get install -y libicu-dev freetds-common freetds-bin unixodbc \
&& docker-php-ext-install intl mbstring \
&& a2enmod rewrite
COPY app/php.ini /usr/local/etc/php/
COPY app/apache2.conf /etc/apache2/apache2.conf
COPY ./ /var/www/html
RUN find /var/www/html/ -type d -exec chmod 755 {} \;
RUN find /var/www/html/ -type f -exec chmod 644 {} \;
RUN chmod -R 777 /var/www/html/app/cache /var/www/html/app/logs
Ketika saya membangun gambar ini dengan docker build -t myname/symfony_apps:latest .
dan menjalankan wadah dengan docker run -p 8080:80 myname/symfony_apps:latest
. Log Apache dibanjiri oleh kesalahan izin ditolak, hal aneh yang saya periksa ls -a
dan izin baik-baik saja. dan ketika saya menjalankan chmod dari bash kontainer, masalah izin apache hilang dan aplikasi berfungsi dengan baik
Situasi
Menjalankan perintah chmod dari dockerfile: izin diubah tetapi apache masih mengeluh tentang izin yang ditolak. Menjalankan perintah chmod yang sama dengan bash di dalam wadah: izin diubah dan aplikasi saya sedang berjalan
Gagasan, Apakah saya kehilangan sesuatu, mungkin saya harus menambahkan pengguna root di suatu tempat di Dockerfile?
sumber
apache2.conf
) tidak menyebabkan masalah? Apakah kesalahan hilang jika Anda tidak menginstalapache2.conf
?Jawaban:
Saya memiliki masalah yang sama dan tampaknya ada beberapa bug di docker atau overlay2 jika konten direktori dibuat dalam satu layer dan izinnya diubah di yang lain.
Sebagai solusinya, Anda dapat menyalin sumber ke direktori sementara:
Dan kemudian pindah ke
/var/www/html
dan atur izin (dalam satuRUN
perintah):Saya juga membuat masalah GitHub .
sumber
Shell default RUN di Docker adalah / bin / sh dan ini adalah di mana izin yang tidak diatur dengan benar sebenarnya memiliki masalah.
Tetapi Anda dapat mengubah untuk hanya menggunakan / bin / bash sebagai gantinya untuk memperbaiki dengan mudah, perhatikan sebelum dan sesudah daftar direktori
sumber
/bin/bash -c 'chmod +x file'
berhasil dan tidak/bin/sh -c 'chmod +x file'
?Coba tambahkan:
Ini berhasil untuk saya.
sumber
Masalah ini kemungkinan merupakan hasil dari
VOLUME
definisi di dalam Dockerfile hulu. Ketika volume didefinisikan dalam Dockerfile, Anda dapat menambahkan file dengan perintahCOPY
atauADD
langsung ke dalam gambar. Namun, sebuahRUN
baris akan:RUN
perintah ini , Anda akan melihat perubahan Anda diterapkan, tetapi perubahan itu telah diterapkan ke volumedocker diff
jika Anda tidak menghapus wadah sementara (Anda dapat menjalankan build dengan--rm=false
membuatnya tetap)Karena perilaku ini, Anda memiliki opsi untuk:
Perhatikan bahwa di dalam gambar php saat ini, tampaknya volume telah dihapus, yang berarti kita secara efektif memiliki opsi 3.
sumber
Saya baru saja melakukan percobaan dengan yang berikut:
Dan itu bekerja dengan baik.
Namun
Ketika saya menimpa file yang dapat dieksekusi itu melalui volume docker-compose,
execute
izinnya seperti digulung kembali - secara teknis mengesampingkan ke izin file asli.Perbaikan untuk mode dev hanya
chmod a+x yourfile
dari host, yang akan diwariskan pada penulisan volume pemasangan.sumber
docker run
perintah dan tidak ada volume eksternal yang terpasang.