Проблема с разрешениями Docker, nginx и Grav - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь настроить простой рабочий процесс сайта Grav, используя git, Docker и два контейнера: один для nginx и один для PHP. Идея состоит в том, чтобы git clone в мою каплю Digital Ocean и запустить docker-compose up -d --build для создания и обслуживания веб-сайта.

У меня возникают проблемы с разрешениями, когда я пытаюсь получить доступ к сайтам, и даже документация Grav о поиске и устранении неисправностей. проблемы с разрешениями не помогают.

Вот мой docker-compose.yml:

version: '3'

services:
  web:
    build:
      context: .
      dockerfile: ./docker/nginx/Dockerfile
    ports:
        - "80:80"
    volumes:
        - ./src:/var/www/html
    links:
        - php

  php:
    build:
      context: .
      dockerfile: ./docker/php/Dockerfile
    volumes:
      - ./src:/var/www/html

А вот Dockerfile nginx:

FROM nginx:stable-alpine

WORKDIR /var/www/html

COPY ./src .

COPY ./docker/nginx/default.conf /etc/nginx/conf.d/default.conf

Если это пригодится, вот конфигурация nginx, которую я использую:

server {
    listen 80;
    index index.php index.html;
    server_name www.gravtest.test gravtest.test;
    error_log /var/log/nginx/gravtest.test.error.log;
    access_log /var/log/nginx/gravtest.test.access.log;
    root /var/www/html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri =404;
        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_param PATH_INFO $fastcgi_path_info;
    }
}

Dockerfile PHP прост, он просто порождает php:7.3-fpm и устанавливает несколько зависимостей, таких как opcache, gd, et c .. .

Всякий раз, когда я пытаюсь получить доступ к сайту через localhost, я получаю эту ошибку:

Неустранимая ошибка: Uncaught RuntimeException: Создание каталога не удалось для / var / www/html/cache/compiled/files/40779d000b68629af00dd987148afc06.yaml.php in / var / www/html/vendor/rockettheme/toolbox/File/src/File.php: 325 Трассировка стека: ....

Файлы копируются с хоста в контейнер с владельцем nginx:nginx, поэтому я должен быть хорошо, но похоже, что нет. Я попытался установить папки / файлы chmod, используя документацию Grav, но без кубиков.

Я что-то упустил?

1 Ответ

0 голосов
/ 10 марта 2020

Отвечая на мой собственный вопрос:

Оказывается, изображения php-fpm и nginx не используют одного и того же пользователя, поэтому проблема с разрешением возникла из-за этого. Мне просто нужно было добавить нового пользователя в Dockerfile и запустить этот контейнер от этого пользователя.

Так что для PHP мой Dockerfile теперь:

FROM php:7.3-fpm

# Install a few dependencies here...

COPY ./src /var/www/html

RUN addgroup --gid 1000 mygroup
RUN adduser --system --no-create-home --disabled-password --disabled-login --uid 1000 --ingroup mygroup myuser

RUN chown -R myuser:mygroup /var/www

USER myuser

И для nginx:

FROM nginx:stable-alpine

RUN addgroup --gid 1000 mygroup
RUN adduser --system --no-create-home --disabled-password --disabled-login --uid 1000 --ingroup mygroup myuser

WORKDIR /var/www/html

RUN chown -R myuser:mygroup .

USER myuser

И теперь все отлично работает! :)

...