caching文件的symfony docker权限问题

我有一个docker-compose的docker的symfony安装程序,除了当我运行caching时工作的很好从控制台清除 ,web服务器不能访问这些文件。

我可以通过取消注释umask(0000)来绕过权限问题; 在控制台和web / app_dev.php,但我想运行symfony作为推荐。

我做的是旋转集装箱docker-compose up
然后我进入容器。 容器包含apache,php和通过数据量的代码。

 docker exec -i -t apache_1 /bin/bash 

显然,我以root身份login,当我运行

 app/console cache:clear 

caching中的所有文件都属于用户root。 WWW数据作为networking服务器用户现在不能访问这些文件了。

我也可以通过以www-datalogin来绕过这个问题,然后由cache:clear生成的文件属于www-data,networking服务器可以访问它们。

 docker exec -u www-data -i -t apache_1 /bin/bash 

但是这样做的缺点是我没有登陆bash,而是login/ usr / sbin / nologin,而且没有bash_history之类的东西。

search我发现这是Dockerfile的一部分,以解决权限问题,但它对我没有影响。

 RUN usermod -u 1000 www-data 

如果我理解正确的这切换用户1000万维网数据,但因为我是当我login到容器的根,这是行不通的,我假设。

那么为什么我当我login到容器的 ,这个usermod假设如何工作?

docker-compose.yml:

 proxy: image: jwilder/nginx-proxy:latest volumes: - /var/run/docker.sock:/tmp/docker.sock:ro ports: - "80:80" elastic: build: docker/elasticsearch ports: - "9200:9200" volumes: - data/elasticsearch:/usr/local/elasticsearch/data apache: build: docker/apachephp environment: - VIRTUAL_HOST=myapp.dev volumes: - ./code:/var/www/app - ./dotfiles/.bash_history:/.bash_history - ./logs:/var/www/app/app/logs links: - elastic expose: - "80" 

我认为将www-data的用户名更改为您的主机用户的ID是一个很好的解决scheme,因为主机用户的权限设置相当容易。

 #change www-data`s UID inside a Dockerfile RUN usermod -u [USERID] www-data 

用户ID 1000是大多数Linux系统afaik … 501在mac上的默认值
你可以在主机系统上运行id -u来查找。

然后,您可以login容器来运行symfony命令作为万维网数据

docker exec -it -u www-data [CONTAINER] bash

我想知道如何在容器构build上dynamic地设置用户标识。 我猜想通过--build-arg将它传递给docker-compose将是方法

 docker-compose build --build-arg USERID=$(id -u) 

…但还没有设法访问该Dockerfile中的变种。