我正在尝试通过 Docker 使用 nginx 和 php-fpm 部署一个非常简单的 Symfony 应用程序。
两个 docker 服务:
1. web : 运行nginx
2. php:运行php-fpm;包含应用程序源。
我想构建无需任何外部依赖即可部署的镜像。
这就是我在 php 容器 中复制源代码的原因。
关于开发过程;我正在用本地路径覆盖 /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
关于权限的问题。
当访问本地主机时,Symfony 正在启动,但是 cache/logs/sessions 文件夹不可写。
- nginx 使用 /var/www/html 来提供静态文件。
- php-fpm 使用 /var/www/html 来执行 php 文件。
我不确定这个问题。 但是我如何确定以下内容:
- /var/www/html 必须对 nginx 可读吗?
- /var/www/html 对于 php-fpm 必须是可写的?
注意:我正在从 MacbookPro 构建图像; 缓存/日志/ session 为 777。
最佳答案
docker-compose.yml 支持 user
服务下的指令。文档只在 run
命令中提到它,但它的工作原理是一样的。
我有一个类似的设置,我是这样做的:
# 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
user: "$UID"
我必须在运行 docker-compose
之前运行 export UID
,然后将默认用户设置为我的当前用户。这允许日志记录/缓存等按预期工作。
关于php - 如何使用 docker 处理权限 - nginx/php-fpm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45306484/