Я занимаюсь разработкой темы Wordpress и хочу использовать Docker в моей настройке dev.То, что я сделал, довольно просто:
- создайте
database
сервис под управлением MySQL 5.7 - создайте
wordpress
сервис, где я монтирую папку своей темы как том в/var/www/html/wp-content/themes
Однако я борюсь с разрешениями для тома.
Я работаю со следующей структурой папок проекта:
.
├── docker-compose.yml
└── my-theme
MyФайл docker-compose.yml
выглядит следующим образом:
version: '3.2'
services:
database:
image: mysql:5.7
volumes:
- my_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: root
wordpress:
depends_on:
- database
image: wordpress:php7.3-apache
ports:
- '8000:80'
restart: always
environment:
WORDPRESS_DB_HOST: database:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: root
working_dir: /var/www/html
volumes:
- type: volume
source: ./my-theme
target: /var/www/html/wp-content/themes/my-theme
volumes:
my_data: {}
Когда я запускаю docker-compose up
, все работает должным образом: контейнеры создаются, и я могу получить доступ к Wordpress в браузере.Однако тема, которую я смонтировал как том, ничего не отображает, когда я активирую ее.
Когда я sh
в wordpress
контейнере (docker-compose exec wordpress sh
), я вижу, что папка wp-content/themes
принадлежит root
.Итак, я решил, что это проблема.
Я проверил, что это проблема с разрешениями, вручную и рекурсивно chown
с папкой wp-content
в контейнере:
chown -R www-data:www-data /var/www/html/wp-content
Как только это былосделано, моя тема отображается как ожидалось.Поэтому сейчас я ищу способ избежать этого chown
процесса (идея заключается в том, что любой другой разработчик может клонировать этот проект, просто запустите docker-compose up
и начните работать).
Первое, что я попробоваля должен был создать Dockerfile , где я должен был бы создать слегка настроенный образ Wordpress:
FROM wordpress:php7.3-apache
RUN mkdir -p /var/www/html/wp-content/themes/test-theme \
&& chown -R /var/www/html/wp-content
. Я решил, что, создав каталог и chown
заранее его, томбудет наследовать пользователя: сопоставление группы.Увы, нет такой вещи;монтирование тома переопределяет это сопоставление и устанавливает его на root:root
.
. После этого я попытался установить переменные окружения APACHE_RUN_USER
и APACHE_RUN_GROUP
в моем файле docker-compose.yml
:
version: '3.2'
services:
database:
...
wordpress:
...
environment:
WORDPRESS_DB_HOST: database:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: root
APACHE_RUN_USER: '$(id -u)'
APACHE_RUN_GROUP: '$(id -g)'
working_dir: /var/www/html
volumes:
- type: volume
source: ./my-theme
target: /var/www/html/wp-content/themes/my-theme
volumes:
my_data: {}
Однако при сборке это породило кучу ошибок apache.
Сейчас я немного растерялся.Есть ли лучшая практика для управления разрешениями подключенных томов в Docker?Я много гуглил за это, но решения, которые я нахожу, идут немного выше моей головы.