我正在使用docker-compose为一堆symfony2应用程序设置一个可移植的开发环境(虽然我想要做的只是symfony特有的).我决定将本地计算机上的源文件作为数据卷公开,其中包含docker中的所有其他依赖项.这样开发人员就可以在本地文件系统上进行编辑.
一切都很好,除了在运行应用程序后我的缓存和日志文件以及/ vendor目录中的composer创建的文件现在归root所有.
我已经在这里读到了这个问题和一些可能的方法:
Changing permissions of added file to a Docker volume
但我不能完全弄清楚我在docker-compose.yml文件中要做出哪些更改,以便当我的symphony容器以docker-compose启动时,所有创建的文件都具有主机上用户的权限.
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运行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命令.