相关疑难解决方法(0)

symfony docker缓存文件的权限问题

我有一个带有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)

symfony docker docker-compose

5
推荐指数
1
解决办法
4338
查看次数

标签 统计

docker ×1

docker-compose ×1

symfony ×1