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

Php 由于权限问题,无法在docker容器内运行Laravel应用程序,php,laravel,docker,permissions,ubuntu-16.04,Php,Laravel,Docker,Permissions,Ubuntu 16.04,我有一个docker compose配置,它定义了我在Ubuntu 16.04实例中的一个应用程序中使用的三个容器: 一个nginx容器 mysql容器 以及一个PHP容器,该容器稍微定制为包含composer和phpunit,并从基本php74:fpm-alpine目录派生。此容器中的工作目录是/var/www 我在docker compose.yml中定义了一个从应用程序映射到容器内部的卷: app-php: volumes: - ./src:/var/www 每当我尝试运

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

  • 一个nginx容器
  • mysql容器
  • 以及一个PHP容器,该容器稍微定制为包含
    composer
    phpunit
    ,并从基本
    php74:fpm-alpine
    目录派生。此容器中的工作目录是
    /var/www
我在
docker compose.yml
中定义了一个从应用程序映射到容器内部的卷:

app-php:
  volumes:
    - ./src:/var/www
每当我尝试运行我的Laravel应用程序时,我都会收到:

无法打开流或文件“/var/www/storage/logs/laravel.log”:无法打开流:权限被拒绝

显然,拉威尔不能写入或读取这个文件,但我不明白为什么。整个应用程序目录具有以下权限设置:

$ 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配置或主机系统上的权限配置进行哪些更改才能运行我的应用程序?

据我所知,这与主机文件系统中的用户权限无关,更确切地说,它感觉像是docker容器中使用的用户的权限问题。看看下面的链接是否对您有所帮助-

您需要对文件夹
存储设置读/写权限,以便允许laravel在那里创建新文件,如
.log

尝试运行将目录的所有者更改为
www-data


sudo chown-R www-data:www-data-storage

如果是这种情况,为什么从主机将权限更改为
777
会允许应用程序运行?您需要了解拥有当前php进程的系统用户名,然后相应地设置权限。您可以通过允许向所有人写入chmod 777、记录任何新内容、检查新日志文件的所有者等方式对其进行经验测试……正如我在问题中提到的,这不起作用,也不是一个可接受的解决方案。请添加
ls-al./src
@reactingtoangularvue我希望查看存储目录的权限。