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中的变种。