我有一个docker-compose
配置,该配置定义了三个容器,这些容器用于Ubuntu 16.04实例中的一个应用程序:
composer
和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 {} \;
这些都没有。我能够使我的应用程序运行的only方法是我正在执行的sudo chmod -R 777
,这是不可接受的解决方案。 775
或755
都无法解决问题。
这导致了我的整体问题:为了运行我的应用程序,我需要对我的docker配置或主机系统上的权限配置进行哪些更改?
我有一个docker-compose配置,它定义了我在Ubuntu 16.04实例中用于我的一个应用程序的三个容器:Nginx容器,mysql容器和PHP容器...
据我所知,它与主机文件系统中的用户权限无关,而是感觉与docker容器内使用的USER权限有关。查看以下链接是否对您有帮助-https://docs.docker.com/engine/reference/builder/#user
您需要在文件夹storage
上设置读写权限,以允许laravel在其中创建新文件,例如.log