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

时间:2017-07-25 14:37:06

标签: php symfony nginx docker docker-compose

我正在尝试使用nginx& amp;部署一个非常简单的Symfony应用程序。 php-fpm通过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

问题在于权限 访问localhost时,Symfony会出现问题,但缓存 / 日志 / 会话文件夹不可写。

  1. nginx正在使用 / var / www / html 来提供静态文件。
  2. php-fpm正在使用 / var / www / html 来执行php文件。
  3. 我不确定这个问题。 但我怎么能确定以下内容:

    1. / var / www / html 必须对nginx可读?
    2. / var / www / html 必须可写为php-fpm吗?
    3. 注意:我正在从MacbookPro构建图像; 缓存/日志/会话是777。

3 个答案:

答案 0 :(得分:2)

docker-compose.yml支持服务下的user指令。文档仅在B命令中提及它,但它的工作原理相同。

我有类似的设置,这就是我的方式:

A

我必须在运行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" ,然后将默认用户设置为当前用户。这允许日志记录/缓存等按预期工作。

答案 1 :(得分:0)

我找到了解决方案; 但如果有人能够解释最佳实践,那将会很感激!

文件夹缓存/日志/会话来自docker context而非空(在主机上)。
现在文件夹已被刷新,Symfony以良好的权限创建它们。

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

答案 2 :(得分:0)

我正在使用此解决方案“ Docker for Symfony” https://github.com/StaffNowa/docker-symfony

的新功能
./d4d start
./d4s stop
./d4d help