【问题标题】:Permissions issue with Docker, nginx and GravDocker、nginx 和 Grav 的权限问题
【发布时间】:2020-06-21 06:43:42
【问题描述】:

我正在尝试使用 git、Docker 和两个容器设置一个简单的 Grav 站点工作流:一个用于 nginx,一个用于 PHP。想法是将git clone 加入我的Digital Ocean droplet 并运行docker-compose up -d --build 来构建和服务网站。

每当我尝试访问这些网站时都会遇到权限问题,甚至 Grav 关于权限问题故障排除的文档也无济于事。

这是我的docker-compose.yml

version: '3'

services:
  web:
    build:
      context: .
      dockerfile: ./docker/nginx/Dockerfile
    ports:
        - "80:80"
    volumes:
        - ./src:/var/www/html
    links:
        - php

  php:
    build:
      context: .
      dockerfile: ./docker/php/Dockerfile
    volumes:
      - ./src:/var/www/html

这里是 nginx 的 Dockerfile:

FROM nginx:stable-alpine

WORKDIR /var/www/html

COPY ./src .

COPY ./docker/nginx/default.conf /etc/nginx/conf.d/default.conf

如果有什么用,这里是我正在使用的 nginx 配置:

server {
    listen 80;
    index index.php index.html;
    server_name www.gravtest.test gravtest.test;
    error_log /var/log/nginx/gravtest.test.error.log;
    access_log /var/log/nginx/gravtest.test.access.log;
    root /var/www/html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

PHP Dockerfile 很简单,它只是生成 php:7.3-fpm 并安装一些依赖项,如 opcache、gd 等...

每当我尝试通过localhost 访问该网站时,我都会收到此错误:

致命错误: 未捕获的 RuntimeException:在 /var/www/html/vendor/rockettheme/ 中为 /var/www/html/cache/compiled/files/40779d000b68629af00dd987148afc06.yaml.php 创建目录失败toolbox/File/src/File.php:325 堆栈跟踪:....

文件从主机复制到具有nginx:nginx 所有者的容器,所以我应该很好,但看起来我不是。我尝试使用 Grav 的文档设置文件夹/文件 chmod,但没有骰子。

我错过了什么吗?

【问题讨论】:

    标签: php docker nginx docker-compose grav


    【解决方案1】:

    回答我自己的问题:

    原来php-fpmnginx 的图片使用的不是同一个用户,所以权限问题由此而来。我只需向 Dockerfile 添加一个新用户,然后从该用户运行该容器。

    所以对于 PHP,我的 Dockerfile 现在是:

    FROM php:7.3-fpm
    
    # Install a few dependencies here...
    
    COPY ./src /var/www/html
    
    RUN addgroup --gid 1000 mygroup
    RUN adduser --system --no-create-home --disabled-password --disabled-login --uid 1000 --ingroup mygroup myuser
    
    RUN chown -R myuser:mygroup /var/www
    
    USER myuser
    

    对于 nginx:

    FROM nginx:stable-alpine
    
    RUN addgroup --gid 1000 mygroup
    RUN adduser --system --no-create-home --disabled-password --disabled-login --uid 1000 --ingroup mygroup myuser
    
    WORKDIR /var/www/html
    
    RUN chown -R myuser:mygroup .
    
    USER myuser
    

    现在一切正常! :)

    【讨论】:

      猜你喜欢
      • 2021-04-22
      • 2021-03-04
      • 2016-08-15
      • 2016-06-10
      • 1970-01-01
      • 2021-01-04
      • 2019-08-22
      • 2017-03-01
      • 2023-03-17
      相关资源
      最近更新 更多