Папка Drupal 8 пуста после запуска docker-compose - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь создать локальную разработку для Drupal 8. Вот содержимое моего файла docker-compose.yml.

version: "3"

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - "./drupal/web:/var/www/html"
      - "./drupal/nginx.conf:/etc/nginx/conf.d/default.conf"
    depends_on:
      - php      
  php:
    image: drupal:8.6-fpm-alpine
    volumes:
      - "./drupal/web:/var/www/html"
    restart: always
    depends_on:
      - mysql
  mysql:
      image: mysql:8
      entrypoint: ['/entrypoint.sh', '--default-authentication-plugin=mysql_native_password']
      environment:
        MYSQL_ROOT_PASSWORD: "drupal"
        MYSQL_USER: "drupal"
        MYSQL_PASSWORD: "drupal"
        MYSQL_DATABASE: "drupal"
      volumes:
        - "./drupal/mysql:/var/lib/mysql"

Если я заменю тома друпала, то он создаст содержимое друпа в контейнере друпала. Однако после этого я не могу получить доступ к содержимому drupal с хост-компьютера.

      - /var/www/html/modules
      - /var/www/html/profiles
      - /var/www/html/themes
      - /var/www/html/sites

После запуска docker-compose up . Я поддерживаю содержание drupal в папке drupal / web. Однако это пусто. Вы знаете, что с этим случилось? Спасибо,

1 Ответ

1 голос
/ 20 марта 2019

Что касается определения томов, то согласно this кажется, что вы должны объявить их, как вы описали в своем обновленном вопросе.

Существует общее мнение, что / var / www / html / modules, / var / www / html / profile и / var / www / html / themes - это вещи, которые обычно должны быть томами (и могут иметь явное объявление VOLUME в будущем обновлении этого изображения), но обработка / var / www / html / sites будет несколько более сложной, поскольку содержимое этого каталога необходимо инициализировать с содержимым из изображения.

Таким образом, вам необходимо определить каждый путь как том отдельно, либо в локальном каталоге, либо с использованием именованных томов, например:

docker run --name some-drupal --network some-network -d \
    -v /path/on/host/modules:/var/www/html/modules \
    -v /path/on/host/profiles:/var/www/html/profiles \
    -v /path/on/host/sites:/var/www/html/sites \
    -v /path/on/host/themes:/var/www/html/themes \
    drupal

Что касается проблемы с разрешениями, это связано с тем, что контейнер меняет владельца и группу на www-data, как показано в здесь , который может использовать другой UID / GID, чем ваш фактический пользователь хоста. Из докер-файла друпала:

RUN curl -fSL "https://ftp.drupal.org/files/projects/drupal-${DRUPAL_VERSION}.tar.gz" -o drupal.tar.gz \
    && echo "${DRUPAL_MD5} *drupal.tar.gz" | md5sum -c - \
    && tar -xz --strip-components=1 -f drupal.tar.gz \
    && rm drupal.tar.gz \
    && chown -R www-data:www-data sites modules themes

Что вы можете сделать, это установить правила ACL с вашего хоста для файлов drupal, например, как показано ниже, чтобы вы могли редактировать и изменять файлы во время разработки (при условии, что ваше имя пользователя dale ):

sudo setfacl -Rm u:dale:rwx,d:u:dale:rwx /path/to/drupal/files

И, конечно, если вы создаете файл вручную с хоста, вам нужно дать ему надлежащее разрешение, чтобы веб-сервер мог получить к нему доступ (при условии, что www-data uid равен 33, а gid равен 33), выполнив следующую команду:

sudo chown 33:33 /path/to/drupla/files_or_directories/ -R

...