我有一个带有docker-compose的docker的symfony设置,除非我运行缓存时运行良好:从控制台清除,webserver无法访问文件.
我可以通过取消注释umask(0000)来规避权限问题; 在控制台和web/app_dev.php但我想按照建议运行symfony.
我做的是旋转容器docker-compose up
然后我进入容器.容器包含apache,php和通过数据卷的代码.
docker exec -i -t apache_1 /bin/bash
Run Code Online (Sandbox Code Playgroud)
显然我以root身份登录然后运行时
app/console cache:clear
Run Code Online (Sandbox Code Playgroud)
缓存中的所有文件都属于root用户.www-data as webserver用户现在无法再访问文件了.
我也可以通过以www-data登录然后缓存生成的文件来避免这种情况:clear属于www-data,webserver可以访问它们.
docker exec -u www-data -i -t apache_1 /bin/bash
Run Code Online (Sandbox Code Playgroud)
但这有一个缺点,我不会在bash,但在/ usr/sbin/nologin,并没有像bash_history等东西.
搜索我发现这是解决许可问题的Dockerfile的一部分,但它对我没有影响.
RUN usermod -u 1000 www-data
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,这将用户1000切换到www-data,但是当我登录到容器时我是根,这不起作用,我假设.
所以当我登录容器时为什么我会root,这个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:
- …Run Code Online (Sandbox Code Playgroud)