我正在开发一个wordpress主题,并希望在我的dev设置中使用docker。我所做的非常简单:
-
创建一个
database
运行MySQL5.7的服务
-
创建一个
wordpress
服务,我将主题文件夹作为卷装入其中
/var/www/html/wp-content/themes
不过,我正在努力获得卷权限。
我正在使用以下项目文件夹结构:
.
âââ docker-compose.yml
âââ my-theme
我的
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
进入
文字出版社
集装箱(集装箱)
docker-compose exec wordpress sh
)我可以看到
wp-content/themes
文件夹归
root
. 所以我想这就是问题所在。
我手动和递归地验证了这是一个权限问题
chown
ing
wp-content
容器中的文件夹:
chown -R www-data:www-data /var/www/html/wp-content
完成后,我的主题按预期呈现。所以现在我正在寻找一种避免这种情况的方法
乔恩
过程(其思想是任何其他开发人员都可以克隆这个项目,只需运行
Docker合成
开始工作)。
我试着做的第一件事就是
文档文件
在这里我将构建一个稍微定制的WordPress图像:
FROM wordpress:php7.3-apache
RUN mkdir -p /var/www/html/wp-content/themes/test-theme \
&& chown -R /var/www/html/wp-content
我的理由是通过创建目录和
乔恩
预先设置,卷将继承user:group映射。唉,没有这样的事情;装载卷会覆盖此映射并将其设置回
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中管理已装入卷的权限是否有任何最佳实践?我已经在谷歌上搜索了很多,但我发现的解决方案有点让我头晕目眩。