symfony docker 缓存文件的权限问题

2024-05-12

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

我想改变www-data将 userid 替换为主机用户的 id 是一个很好的解决方案,因为主机用户的权限设置相当容易。

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

用户 id 1000 是大多数 Linux 系统的默认值,据我所知... 501 在 mac 上
你可以跑id -u在主机系统上查找。

然后,您可以登录容器以运行 symfony 命令作为 www-data

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

我想知道如何在容器构建上动态设置用户 ID。 我想通过它传递--build-argdocker-compose 就是这样

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

...但尚未设法访问 Dockerfile 中的该 var。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

symfony docker 缓存文件的权限问题 的相关文章

随机推荐