ivo*_*oba 5 symfony docker docker-compose
我有一个带有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:
- ./code:/var/www/app
- ./dotfiles/.bash_history:/.bash_history
- ./logs:/var/www/app/app/logs
links:
- elastic
expose:
- "80"
Run Code Online (Sandbox Code Playgroud)
我认为将www-datas 用户 ID更改为您的主机用户 ID 是一个很好的解决方案,因为主机用户的权限很容易设置。
#change www-data`s UID inside a Dockerfile
RUN usermod -u [USERID] www-data
Run Code Online (Sandbox Code Playgroud)
用户 id 1000 是大多数 linux 系统的默认值 afaik... mac上的501
您可以id -u在主机系统上运行以找出答案。
然后,您可以登录容器以将 symfony 命令作为 www-data 运行
docker exec -it -u www-data [CONTAINER] bash
我想知道如何在容器构建时动态设置用户 ID。我想将它传递--build-arg给 docker-compose 将是方法
docker-compose build --build-arg USERID=$(id -u)
Run Code Online (Sandbox Code Playgroud)
...但还没有设法访问 Dockerfile 中的那个 var。
| 归档时间: |
|
| 查看次数: |
4338 次 |
| 最近记录: |