由于权限问题,无法在 docker 容器内运行 Laravel 应用程序

我有一个docker-compose配置,它定义了三个容器,这些容器用于 Ubuntu 16.04 实例中的一个应用程序:


一个 nginx 容器,

一个mysql容器,

还有一个 PHP 容器,它经过了轻微的定制以包含composerand phpunit,并且是从基本php74:fpm-alpine目录派生的。此容器中的工作目录是/var/www.

我定义了一个从我的应用程序映射到容器内部的单个卷docker-compose.yml:


app-php:

  volumes:

    - ./src:/var/www

每当我尝试运行我的 Laravel 应用程序时,我都会收到:


The stream or file "/var/www/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied.


显然 Laravel 无法写入或读取此文件,但我不知道为什么。整个应用目录有如下权限设置:


$ la -la


-rw-rw-r--  1 myuser www-data    213 Dec 31 07:07 aFile

drwxrwsr-x 12 myuser www-data   4096 Dec 31 07:07 aDirectory

这是通过以下命令完成的:


sudo usermod -aG www-data myuser

// myuser is now a member of the www-data group.

sudo chgrp -R www-data /var/www

sudo chmod -R g+w /var/www

sudo find /var/www -type d -exec chmod 2775 {} \;

sudo find /var/www -type f -exec chmod ug+rw {} \;

这些都不起作用。我能够让我的应用程序运行的唯一sudo chmod -R 777方法是执行,这不是一个可接受的解决方案。既不解决775也不755解决问题。


这导致了我的整体问题:我需要对我的 docker 配置或主机系统上的权限配置进行哪些更改才能运行我的应用程序?


人到中年有点甜
浏览 357回答 2
2回答

绝地无双

据我了解,它与主机文件系统中的用户权限无关,而是感觉像是在 docker 容器中使用的 USER 权限存在问题。看看以下链接是否对您有帮助 - https://docs.docker.com/engine/reference/builder/#user

互换的青春

您需要在文件夹上设置读/写权限,storage以允许 laravel 在那里创建新文件,例如.log尝试将目录的所有者更改为www-data:sudo chown -R www-data:www-data storage
打开App,查看更多内容
随时随地看视频慕课网APP