如何使用docker语言 - nginx / php-fpm处理权限



我正在尝试通过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 撰写配置文件。

# 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正在启动,但缓存/日志/会话文件夹是不可写的。

  1. nginx正在使用/var/www/html来提供静态文件。
  2. PHP-FPM 使用/var/www/html来执行 PHP 文件。

我不确定这个问题。 但是我怎么能确定以下几点:

/
  1. var/www/html必须对 nginx 是可读的?
  2. /
  3. var/www/html必须是可写的 php-fpm ?

注意:我正在从 MacbookPro 构建图像;缓存/日志/会话为 777。

docker-compose.yml在services下支持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然后将默认用户设置为我的当前用户。这允许日志记录/缓存等按预期工作。

我正在使用这个解决方案"Docker for Symfony"https://github.com/StaffNowa/docker-symfony

上的新功能

./d4d start
./d4s stop
./d4d help

我找到了解决方案; 但是,如果有人可以解释最佳实践,将不胜感激!

文件夹缓存/日志/会话从码头工人上下文中不为空(在主机上(。
现在文件夹已被刷新,Symfony使用良好的权限创建它们。

我发现有人使用usermod来更改 UID,即:1000 用于 www-data/nginx ... 但这似乎是一个丑陋的黑客。你怎么看?

最新更新