使用Docker上的Php / Nginx的工艺CMS不能在Document Root之外编写

我试图build立一个使用Php和Nginx的Docker设置的基本Craft CMS的集装箱版本。 工艺似乎无法写入我的Nginx文档根之外的文件夹。 (请参阅底部的更多细节)我使用的是Docker-Compose,这是我目前的Docker-compose.yml:

nginx: build: ./compose/nginx/ ports: - 80:80 links: - php volumes_from: - app php: build: ./compose/php/ expose: - 9000 links: - mysql volumes_from: - app app: image: php:7.0-fpm volumes: - ./app:/var/www/html - ./vendors:/var/www command: "true" mysql: image: mysql:latest volumes_from: - data environment: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: project MYSQL_USER: project MYSQL_PASSWORD: project data: image: mysql:latest volumes: - /var/lib/mysql command: "true" phpmyadmin: image: phpmyadmin/phpmyadmin ports: - 8080:8080 links: - mysql environment: PMA_HOST: mysql 

这个设置完美的工作,这里是我的两个生成Nginx的文件 – DockerFile:

 FROM nginx:latest COPY ./default.conf /etc/nginx/conf.d/default.conf 

Default.conf

 server { listen 80 default_server; root /var/www/html; index index.html index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } access_log off; error_log /var/log/nginx/error.log error; sendfile off; client_max_body_size 100m; location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors off; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; } location ~ /\.ht { deny all; } } 

一切工作接近完美,直到我试图部署Craft CMS,我明白,我没有所有的PHP扩展,但我不相信这会影响我的问题。 我不断收到错误,/ var / www / craft / config不能被PHP写入。 请解决这个问题。 因此,我假设这是Nginx和PHP的权限错误。 尽pipe我已经尝试在我的nginx和php容器以及chmod 777 craft / config文件夹中打开一个bash shell,但是我仍然得到这个错误,所以我对如何解决这个问题感到困惑。

编辑1 ——我能够解决这个问题,通过执行以下到我的PHP构buildconfiguration文件中的我的Dockerfile。

 RUN usermod -u 1000 www-data RUN usermod -G staff www-data RUN chown -R www-data:www-data /var/www 

我不确定这是否是最安全的方式。

docker-compose.yml 应用程序容器定义中,volume声明./vendors:/var/www有效覆盖./app:/var/www/html/ var / www / craft /因此很可能不存在。 应用程序的音量声明应该如下所示:

 app: image: php:7.0-fpm volumes: - ./app:/var/www/html - ./vendors:/var/www/vendors command: "true"