如何使用Docker处理权限-nginx / php-fpm

Tho*_*rat 5 php nginx symfony docker docker-compose

我正在尝试通过ngnx和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
Run Code Online (Sandbox Code Playgroud)

现在,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
Run Code Online (Sandbox Code Playgroud)

问题是关于权限。
当访问本地主机时,Symfony正在启动,但是缓存 / 日志 / 会话文件夹不可写。

  1. nginx使用/ var / www / html提供静态文件。
  2. php-fpm使用/ var / www / html执行php文件。

我不确定这个问题。但是我如何确定以下几点:

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

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

Aus*_*ust 5

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"
Run Code Online (Sandbox Code Playgroud)

我必须在运行export UID之前运行docker-compose,然后将默认用户设置为我的当前用户。这允许日志记录/缓存等按预期工作。


Tho*_*rat -2

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

来自 docker 上下文的文件夹缓存/日志/会话不为空(在主机上)。
现在文件夹已被刷新,Symfony 将使用良好的权限创建它们。

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

  • 如果您有一个可行的解决方案,如果您可以分享它那就太好了:)我希望至少也需要将一些代码复制到 nginx 映像中。 (3认同)