我有一个带有 docker-compose 的 docker symfony 设置,它运行良好,除非我运行缓存:清除Web 服务器可以从控制台访问这些文件。
我可以通过取消注释来规避权限问题掩码(0000);在控制台和 web/app_dev.php 中,但我想按照建议运行 symfony。
我所做的就是旋转容器docker-compose up
然后我进入容器。该容器通过数据卷包含 apache、php 和代码。
docker exec -i -t apache_1 /bin/bash
显然我当时以 root 身份登录,当我运行时
app/console cache:clear
缓存中的所有文件都属于用户root。 www-data 作为网络服务器用户现在无法再访问这些文件。
我还可以通过以 www-data 身份登录来规避此问题,然后由缓存生成的文件:clear 属于 www-data 并且网络服务器可以访问它们。
docker exec -u www-data -i -t apache_1 /bin/bash
但这有一个缺点,就是我不会登陆 bash,而是登陆/usr/sbin/nologin并且没有像 bash_history 之类的东西。
搜索周围我发现这是 Dockerfile 的一部分来解决权限问题,但它对我没有影响。
RUN usermod -u 1000 www-data
如果我理解正确,这会将用户 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:
- ./code:/var/www/app
- ./dotfiles/.bash_history:/.bash_history
- ./logs:/var/www/app/app/logs
links:
- elastic
expose:
- "80"