Apache pada Docker tidak dapat menulis ke volume filesystem

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

Pada VirtualBox, setidaknya, tampaknya Anda tidak dapat mengubah kepemilikan saham. Karena boot2docker menggunakan VirtualBox untuk sebagian besar pengembang yang saya coba dukung, saya tidak dapat berharap untuk menyelesaikan masalah saya chown. Masalah saya tidak akan sulit jika saya bisa menggunakan Kontainer Volume Docker, tapi itu menghambat penggunaan Pengembang. Jadi saya menemukan solusi lain: saya menulis skrip yang menjalankan Apache sebagai pengguna apa pun yang memiliki webroot.

Daging itu adalah:

#!/bin/bash...adduser --system --uid=$(stat -c %u .) "$owner"echo "APACHE_RUN_USER=$owner" >> /etc/apache2/envvars

Jika Anda tidak bisa mengalahkan mereka, bergabunglah dengan mereka.