Apache no Docker não pode gravar no sistema de arquivos de volume

Eu construí imagem para executar o Apache com mod_php, para o desenvolvimento da extensão Magento. Magento precisa gravar no webroot: ele mantém arquivos em /srv/magento/var/ para cache, relatórios de erros e alguns outros recursos. O webroot nesta imagem é um volume do docker e o Apache não é executado como root, portanto, não pode gravar no sistema de arquivos, portanto, o Magento falha.

Na verdade, não consigo chown ou chmod o diretório dentro do contêiner de forma confiável. Não quero usar um contêiner de volume do Docker porque os desenvolvedores devem ter acesso direto aos arquivos no Magento webroot. Eu não me importaria particularmente em executar o Apache como root no contêiner, mas apachectl claro que parece importar-se.

Qual é a maneira apropriada de dar ao usuário Apache em um contêiner Docker acesso de gravação a um volume?

Considere este exemplo de caso:

$ 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

No VirtualBox, pelo menos, parece você não pode alterar a propriedade de uma ação. Como o boot2docker usa o VirtualBox para a maioria dos desenvolvedores que estou tentando suportar, não posso esperar resolver meu problema com chown. Meu problema não seria difícil se eu pudesse usar Contentores De Volume Docker, mas isso dificulta o uso do desenvolvedor. Então eu vim com outra solução: eu escrevi um script que executa o Apache como qualquer usuário possui o webroot.

A carne dele é:

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

Se você não pode vencê-los, junte-se a eles.