Craft CMS с Php / Nginx на Docker не может писать вне Document Root

Я пытаюсь настроить контейнерную версию базовой Craft CMS с использованием Docker с Php и Nginx. Похоже, что 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
— 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. Хотя я попытался открыть оболочку bash внутри обоих контейнеров nginx и php и папки chmod 777 craft / config, и я все еще получаю эту ошибку, поэтому я немного запутался в том, как ее исправить.

РЕДАКТИРОВАТЬ 1 ——
Я смог решить эту проблему, внедрив следующее в свой Dockerfile в моем профиле сборки php.

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

Я не уверен, что это самый безопасный способ.

2

Решение

В вашем докер-compose.yml приложение определение контейнера декларация объема ./ Поставщиков: / вар / WWW эффективно перезаписывает ./ Приложение: / вар / WWW / HTML. / Вар / WWW / корабль / поэтому, скорее всего, не существует.
Объемные декларации для приложение вместо этого должен выглядеть следующим образом:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]