Apache en Docker no puede escribir en el sistema de archivos de volumen

Yo construí imagen para ejecutar Apache con mod_php, para el desarrollo de extensiones de Magento. Magento necesita escribir en la raíz web: mantiene los archivos en /srv/magento/var/ para caché, informes de errores y algunas otras funciones. La raíz web de esta imagen es un volumen de docker, y Apache no se ejecuta como root, por lo que no puede escribir en el sistema de archivos, por lo que Magento falla.

En realidad, no puedo chown o chmod el directorio dentro del contenedor de manera confiable. No quiero usar un Contenedor de Volumen Docker porque los desarrolladores deberían tener acceso directo a los archivos en la raíz web de Magento. No me importaría particularmente ejecutar Apache como root en el contenedor, pero apachectl seguro que parece importarle.

¿Cuál es la forma adecuada de dar al usuario de Apache en un contenedor Docker acceso de escritura a un volumen?

Considere este caso de ejemplo:

$ 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

En VirtualBox, al menos, parece no puede cambiar la propiedad de una acción. Dado que boot2docker usa VirtualBox para la mayoría de los desarrolladores que estoy tratando de admitir, no puedo esperar resolver mi problema con chown. Mi problema no sería difícil si pudiera usar Contenedores de Volumen de Docker, pero eso dificulta el uso de los desarrolladores. Así que se me ocurrió otra solución: escribí un guión que ejecuta Apache como cualquier usuario que posea la raíz web.

La carne de esto es:

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

Si no puedes vencerlos, únete a ellos.