Docker权限开发环境使用主机安装的卷

时间:2015-07-16 23:27:36

标签: symfony docker docker-compose

我正在使用docker-compose为一堆symfony2应用程序设置一个可移植的开发环境(尽管我想做的事情并不是symfony特有的)。我决定将本地计算机上的源文件公开为具有docker中所有其他依赖项的数据卷。这样开发人员就可以在本地文件系统上进行编辑。

一切都很好,除了在运行应用程序后我的缓存和日志文件以及/ vendor目录中的composer创建的文件现在归root所有。

我已经在这里阅读了这个问题和一些可能的方法:

Changing permissions of added file to a Docker volume

但是我可以很清楚我在docker-compose.yml文件中做了哪些更改,以便当我的symphony容器以 docker-compose up 开始时,创建具有主机上用户的权限。

我发布文件以供参考,工作人员是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 个答案:

答案 0 :(得分:3)

其中一个解决方案是在容器中执行命令。我已经针对过去遇到的同一问题尝试了多种解决方法。我发现在容器内执行命令是最友好的。

示例命令: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命令。