Saya membangun sebuah gambar untuk menjalankan Apache dengan mod_php, untuk pengembangan ekstensi Magento. Magento perlu menulis ke webroot: itu menyimpan file di /srv/magento/var/
untuk cache, pelaporan kesalahan, dan beberapa fitur lainnya. Webroot pada gambar ini adalah volume buruh pelabuhan, dan Apache tidak berjalan sebagai root, sehingga tidak dapat menulis ke sistem file, jadi Magento gagal.
Saya tidak dapat benar-benar chown atau chmod direktori dalam wadah dengan andal. Saya tidak ingin menggunakan wadah volume buruh pelabuhan karena pengembang harus memiliki akses langsung ke file di Magento webroot. Saya tidak keberatan menjalankan Apache sebagai root dalam wadah, tetapi apachectl
tentu tampaknya pikiran.
Apa cara yang tepat untuk memberi pengguna Apache dalam wadah Docker akses tulis ke volume?
Pertimbangkan contoh kasus ini:
$ cd $(mktemp -dt$(date +%s))$ docker run -d -p 80:80 -v "$PWD:/srv/magento" kojiromike/magento_apache$ cat > index.php <<PHP<?php file_put_contents('foo', 'bar');PHP$ wget -SO/dev/null http://$(boot2docker ip 2>/dev/null)/index.php--2014-12-15 13:33:59-- http://192.168.59.103/index.phpConnecting to 192.168.59.103:80... connected.HTTP request sent, awaiting response... HTTP/1.1 200 OK Date: Mon, 15 Dec 2014 17:18:49 GMT Server: Apache/2.2.22 (Debian) X-Powered-By: PHP/5.4.35-0+deb7u2 Vary: Accept-Encoding Content-Length: 0 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html The file is already fully retrieved; nothing to do.$ ls # Expecting 'foo' to existindex.php$ docker exec -ti $(docker ps -lq) tail -n 4 /var/log/apache2/error.log[Mon Dec 15 17:18:49 2014] [error] [client 192.168.59.3] PHP Warning: file_put_contents(foo): failed to open stream: Permission denied in /srv/magento/index.php on line 1[Mon Dec 15 17:18:49 2014] [error] [client 192.168.59.3] PHP Stack trace:[Mon Dec 15 17:18:49 2014] [error] [client 192.168.59.3] PHP 1. {main}() /srv/magento/index.php:0[Mon Dec 15 17:18:49 2014] [error] [client 192.168.59.3] PHP 2. file_put_contents() /srv/magento/index.php:1