php - 由于权限问题,无法在 docker 容器内运行 Laravel 应用程序
问题描述
我有一个docker-compose
配置,它定义了三个容器,这些容器用于 Ubuntu 16.04 实例中的一个应用程序:
- 一个 nginx 容器,
- 一个mysql容器,
- 还有一个 PHP 容器,它经过了轻微的定制以包含
composer
andphpunit
,并且是从基本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 配置或主机系统上的权限配置进行哪些更改才能运行我的应用程序?
解决方案
据我了解,它与主机文件系统中的用户权限无关,而是感觉像是在 docker 容器中使用的 USER 权限存在问题。看看以下链接是否对您有帮助 - https://docs.docker.com/engine/reference/builder/#user
推荐阅读
- xamarin.forms - 有没有办法检测 CollectionView 滚动是由用户还是 ScrollTo 发起的?
- r - 如何根据出现在不同数据集中的两列之间的匹配在数据框中创建变量?
- javascript - 全局变量在三个连续的 switch 函数中有效,但在第 4 个中无效(未定义)
- java - 在 Android 中使用 Zxing 扫描仪如何读取 UPI 二维码?
- string - 如何在字符串指针中查找子字符串
- regex - 匹配字符串之间的真假
- javascript - 滚动更改部分 javascript
- javascript - 如何从此画布中获取每个圆的坐标
- generics - 使用 Any 时不明确的重载方法引用
- python-3.x - python - 如何在python中使用matplotlib为重叠图添加两个不同的标签?