使用主机挂载卷的Docker权限开发环境

8
我正在使用docker-compose为一组symfony2应用程序设置便携式开发环境(尽管我想做的事情与symfony无关)。我决定将本地机器上的源文件公开为数据卷,并将所有其他依赖项放在docker中。这样,开发人员可以在本地文件系统上进行编辑。
一切都很顺利,唯一的问题是,在运行应用程序后,我的缓存、日志文件和composer在/vendor目录中创建的文件现在都属于root。
我已经阅读了这个问题和一些可能的解决方案:
更改添加到Docker卷的文件权限
但我无法弄清楚我需要在docker-compose.yml文件中做出什么更改,以便当我的symphony容器在docker-compose up时启动时,任何创建的文件都具有主机机器上用户的权限。
我发布文件作为参考,其中worker是php等所在的位置:
source:
    image: symfony/worker-dev
    volumes:
    - $PWD:/var/www/app
mongodb:
    image: mongo:2.4
    ports:
    - "27017:27017"
    volumes_from:
    - source
worker:
    image: symfony/worker-dev
    ports:
    - "80:80"
    - mongodb
    volumes_from:
    - source
    volumes:
    - "tmp/:/var/log/nginx"
1个回答

4

其中一种解决方案是在您的容器内执行命令。我曾尝试过多种解决方法来解决相同的问题。我发现在容器内执行命令最为用户友好。

示例命令:docker-compose run CONTAINER_NAME php bin/console cache:clear。您可以使用makeant或任何现代工具来缩短命令。

使用Makefile的示例:

all: | build run test

build: | docker-compose-build
run: | composer-install clear-cache

############## docker compose

docker-compose-build:
        docker-compose build

############## composer

composer-install:
        docker-compose run app composer install

composer-update:
        docker-compose run app composer update

############## cache

clear-cache:
        docker-compose run app php bin/console cache:clear

docker-set-permissions:
        docker-compose run app chown -R www-data:www-data var/logs
        docker-compose run app chown -R www-data:www-data var/cache

############## test

test:
        docker-compose run app php bin/phpunit

或者,您可以引入一个包含环境变量的.env文件,然后使用其中一个变量在Docker容器中运行usermod命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接