我需要使用 src
用户和组将 www-data
文件夹的文件复制到容器中,因此在我的 Dockerfile
中我做到了:
COPY --chown=www-data:www-data src ./
当我访问容器时,我可以看到所有复制的文件,但是如果我在主机上编辑文件,则无法看到更改,因此我必须使用 docker-compose up --build -d
重建项目。
这是我的docker-compose
:
version: '3.9'
services:
php-fpm:
container_name: php_app
restart: always
build:
context: .
dockerfile: ./docker/php-fpm/Dockerfile
#volumes:
# - ./src:/var/www/html
如果我注释掉 volumes
,我可以处理主机目录并查看更改,但这样我就丢失了 www-data
chown。
我该如何处理这种情况?基本上我想要:
www-data
答案 0 :(得分:1)
没有将 chown
应用到挂载文件的特殊功能。将 chown
的那个和手动使用放在一边,您可以让 php-fpm
工作人员与您的 uid
一起运行。 php:8.0.2-fpm-alpine
图像的操作方法如下(在其他图像中,配置文件的路径可能不同):
# Copy pool config out of a running container
docker cp php_app:/usr/local/etc/php-fpm.d/www.conf .
# Change user in config
sed "s/user = www-data/user = $(id -u)/" www.conf -i
# and/or change group
sed "s/group = www-data/group = $(id -g)/" www.conf -i
现在使用 volumes
中的 docker-compose.yml
将编辑过的配置挂载到容器中:
services:
php-fpm:
volumes:
- ./src:/var/www/html # code
- ./www.conf:/usr/local/etc/php-fpm.d/www.conf # pool config
然后重启容器。