Docker 使用主机安装卷的权限开发环境
Docker permissions development environment using a host mounted volume
我正在使用 docker-compose 为一堆 symfony2 应用程序设置一个可移植的开发环境(尽管我不想做任何特定于 symfony 的事情)。我决定将本地机器上的源文件作为一个数据卷与 docker 中的所有其他依赖项一起公开。这样开发人员可以在本地文件系统上进行编辑。
一切正常,除了在 运行 应用程序之后,我的缓存和日志文件以及 composer 在 /vendor 目录中创建的文件现在归 root 所有。
我已经阅读了这个问题和一些可能的解决方法:
Changing permissions of added file to a Docker volume
但我不太清楚我必须在 docker-compose.yml 文件中进行哪些更改,以便当我的 symphony 容器以 [=29 开头时=]-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"
其中一个解决方案是在您的容器内部执行命令。对于我过去遇到的同一问题,我尝试了多种解决方法。我发现在容器内执行命令最人性化。
示例命令:docker-compose run CONTAINER_NAME php bin/console cache:clear
。您可以使用 make
、ant
或任何现代工具来使命令简短。
示例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
命令。
我正在使用 docker-compose 为一堆 symfony2 应用程序设置一个可移植的开发环境(尽管我不想做任何特定于 symfony 的事情)。我决定将本地机器上的源文件作为一个数据卷与 docker 中的所有其他依赖项一起公开。这样开发人员可以在本地文件系统上进行编辑。
一切正常,除了在 运行 应用程序之后,我的缓存和日志文件以及 composer 在 /vendor 目录中创建的文件现在归 root 所有。
我已经阅读了这个问题和一些可能的解决方法:
Changing permissions of added file to a Docker volume
但我不太清楚我必须在 docker-compose.yml 文件中进行哪些更改,以便当我的 symphony 容器以 [=29 开头时=]-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"
其中一个解决方案是在您的容器内部执行命令。对于我过去遇到的同一问题,我尝试了多种解决方法。我发现在容器内执行命令最人性化。
示例命令:docker-compose run CONTAINER_NAME php bin/console cache:clear
。您可以使用 make
、ant
或任何现代工具来使命令简短。
示例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
命令。