我正在尝试通过Docker使用nginx和php-fpm部署一个非常简单的Symfony应用程序 .
两个码头服务:
- web:运行nginx
- php:运行php-fpm;包含应用程序源 .
我想构建可以在没有任何外部依赖性的情况下部署的映像 . 那's why I' m在 php container 内复制源代码 .
关于发展过程;我用本地路径覆盖 /var/www/html 音量 .
# file: php-fpm/Dockerfile
FROM php:7.1-fpm-alpine
COPY ./vendor /var/www/html
COPY . /var/www/html
VOLUME /var/www/html
现在是docker-compose配置文件 .
# file : docker-compose-prod.yml
version: '2'
services:
web:
image: "private/web"
ports:
- 80:80
volumes_from:
- php
php:
image: "private/php"
ports:
- 9000:9000
问题是关于权限 .
访问localhost时,Symfony正在进行操作,但 cache / logs / sessions 文件夹不可写 .
-
nginx使用 /var/www/html 来提供静态文件 .
-
php-fpm正在使用 /var/www/html 来执行php文件 .
我不确定这个问题 . 但是我如何确定以下内容:
-
/var/www/html 必须对nginx可读?
-
/var/www/html 必须可写为php-fpm吗?
注意:我正在从MacbookPro构建图像; cache / logs / sessions 是777 .
2 回答
docker-compose.yml支持服务下的user指令 . 文档只在
run
命令中提及它,但它的工作原理相同 .我有类似的设置,这就是我的方式:
我必须在运行
docker-compose
之前运行export UID
然后将默认用户设置为我当前的用户 . 这允许日志记录/缓存等按预期工作 .我找到了解决方案;但如果有人能够解释最佳实践,那将是值得欣赏的!
来自docker context的文件夹 cache / logs / sessions 不为空(在主机上) .
现在文件夹已被刷新,Symfony创建了具有良好权限的文件夹 .
我发现人们使用 usermod 来改变UID,即:1000-for www-data / nginx ...但它似乎是一个丑陋的黑客 . 你有什么想法 ?