我的第一个Laravel开发环境与Docker的权限问题

问题描述

我正在将开发环境从虚拟机(具有Vagrant和VirtualBox)切换到具有Docker的容器。我为wordpress成功建立了一个简单的开发环境,现在我正试图为Laravel做同样的事情。 我在Windows 10 Pro上,使用WSL2(已安装Ubuntu 20.04)。 如果我尝试打开localhost:8088(公开了我的本地Laravel安装),则会得到:

UnexpectedValueException 流或文件“ /var/www/html/storage/logs/laravel.log”无法以附加模式打开:无法打开流:权限被拒绝

这是我的docker-compose.yml文件

version: '3.3'

services:
    Nginx:
        container_name: 'Nginx_Web_Server'
        image: Nginx:stable-alpine
        depends_on:
            - PHP
            - mariadb
        ports: 
            - 8088:80
        volumes: 
            - ./root:/var/www/html
            - ./Nginx/default.conf:/etc/Nginx/conf.d/default.conf

    PHP:
        container_name: 'PHP-FPM_7.4'
        build:
            context: .
            dockerfile: Dockerfile
        volumes: 
            - ./root:/var/www/html
        ports: 
            - 9090:9000

    mariadb:
        container_name: 'MariaDB_sql_Server'
        image: mariadb
        restart: unless-stopped
        tty: true
        volumes: 
            - ./mariadb_data:/var/lib/MysqL
        environment: 
            MysqL_ROOT_PASSWORD: root
            MysqL_DATABASE: laravel
            MysqL_USER: ll_user
            MysqL_PASSWORD: ll_password

这是Dockerfile中指示的docker-compose.yml

FROM PHP:fpm-alpine3.12

RUN docker-PHP-ext-install pdo pdo_MysqL
#RUN chown -R www-data:www-data /var/www

Nginxdefault.conf文件

server {
    listen 80;
    index index.PHP index.html;
    server_name localhost;
    error_log /var/log/Nginx/error.log;
    access_log /var/log/Nginx/access.log;
    root /var/www/html/public;

    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;
    }
}

怎么了?

解决方法

可以通过以下方式解决:

chown -R www-data:www-data /var/www

chmod -R 755 /var/www/storage

如果它不适合您,请在容器中尝试以下操作:

  • 检查:docker-compose exec php ls -al /var/www/storage

    我看到的是xfs而不是www-data

  • 运行:docker-compose exec php chown -R $USER:www-data /var/www/storage

  • 运行:docker-compose exec php chown -R $USER:www-data /var/www/bootstrap/cache

再试一次,它必须可以工作