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

Posted

技术标签:

【中文标题】我的第一个带有 Docker 的 Laravel 开发环境的权限问题【英文标题】:Permissions problem with my first Laravel dev environment with Docker 【发布时间】:2020-12-20 16:41:04 【问题描述】:

我正在将我的开发环境从虚拟机(使用 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

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

FROM php:fpm-alpine3.12

RUN docker-php-ext-install pdo pdo_mysql
#RUN chown -R www-data:www-data /var/www

还有 nginx 的 default.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;
    

怎么了?

【问题讨论】:

【参考方案1】:

可以解决:

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

再试一次,它必须工作

【讨论】:

以上是关于我的第一个带有 Docker 的 Laravel 开发环境的权限问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Google Cloud 中使用 Laravel 8 的 Docker 容器的 503“服务不可用”

在 mcrypt 扩展上使用 GitlabCI 部署 Laravel 失败

带有 docker 的 API 网关都有哪些选项?

如何使用 docker-compose 在 docker 容器中为 Laravel 环境安装 Behat?

在laravel自动化项目

使用 docker-compose 在 Docker 中运行 laravel/lumen