【发布时间】:2016-01-03 06:09:10
【问题描述】:
我正在尝试使用带有 Php 和 Nginx 的 Docker 设置基本 Craft CMS 的容器化版本。 Craft 似乎无法写入我的 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 构建文件 - Docker 文件:
FROM nginx:latest
COPY ./default.conf /etc/nginx/conf.d/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 权限的错误。虽然,我尝试在我的 nginx 和 php 容器以及 chmod 777 craft/config 文件夹中打开一个 bash shell,但我仍然收到此错误,因此我对如何修复它有点困惑。
编辑 1 ------ 我能够通过在我的 php 构建配置文件中将以下内容实现到我的 Dockerfile 中来解决这个问题。
RUN usermod -u 1000 www-data
RUN usermod -G staff www-data
RUN chown -R www-data:www-data /var/www
我不确定这是否是最安全的方式。
【问题讨论】:
-
会不会和 SELinux 权限有关?
-
我根本不相信我安装了 SELinux。
标签: php nginx docker content-management-system docker-compose