首页 文章

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

提问于
浏览
4

我正在尝试通过Docker使用nginx和php-fpm部署一个非常简单的Symfony应用程序 .

两个码头服务:

  1. web:运行nginx
  2. 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 回答

  • 1

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

  • 0

    我找到了解决方案;但如果有人能够解释最佳实践,那将是值得欣赏的!

    来自docker context的文件夹 cache / logs / sessions 不为空(在主机上) .
    现在文件夹已被刷新,Symfony创建了具有良好权限的文件夹 .

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

相关问题