将文件复制到容器后如何挂载主机目录?

时间:2021-05-13 11:14:54

标签: docker docker-compose dockerfile

我需要使用 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
  • 实时更新文件

1 个答案:

答案 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

然后重启容器。