这是我的文件夹结构:
+-- root-app-dir
| +-- docker
| | +-- Dockerfile
| | +-- nginx.conf
| +-- src // this is where the Laravel app lives
| +-- docker-compose.yml
这是我的docker-compose.yml
version: '2'
services:
app:
build:
context: ./docker
dockerfile: Dockerfile
image: lykos/laravel
volumes:
- ./src/:/var/www/html/
networks:
- app-network
nginx:
image: nginx:latest
volumes:
- ./src/:/var/www/html/
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- 8000:80
networks:
- app-network
mysql:
image: mysql:5.7
ports:
- "4306:3306"
environment:
MYSQL_DATABASE: homestead
MYSQL_USER: homestead
MYSQL_PASSWORD: secret
MYSQL_ROOT_PASSWORD: secret
volumes:
- mysqldata:/var/lib/mysql
networks:
- app-network
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- 8080:80
links:
- mysql
environment:
PMA_HOST: mysql
volumes:
mysqldata:
driver: "local"
networks:
app-network:
driver: "bridge"
这是我的nginx. conf
server {
root /var/www/html/public;
index index.html index.htm index.php;
server_name _;
charset utf-8;
location = /favicon.ico { log_not_found off; access_log off; }
location = /robots.txt { log_not_found off; access_log off; }
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
# include snippets/fastcgi-php.conf;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass app:9000;
fastcgi_index index.php;
}
error_page 404 /index.php;
location ~ /\.ht {
deny all;
}
}
当我运行docker-compose up -d
并尝试通过htts://localhost:8000
访问Laravel应用程序时,屏幕上出现此错误
UnexpectedValueException
The stream or file "/var/www/html/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied
我已经从我的root-app-dir
运行sudo chown lykos:lykos -R ./src
,但问题仍然存在。我该如何解决这个问题?
8条答案
按热度按时间nwlqm0z11#
如果这上面不工作当它被添加到你的.env文件以下将:
这将在不更改用户和组权限的情况下给予其他人权限。
drnojrws2#
有几个选项,哪些可能是错误的:
storage
链接设置不正确,您可以阅读here,启动app
容器后,应执行php artisan storage:link
检查是否存在正确的链接1.您没有给定文件夹的适当权限,默认情况下,
logs
文件夹应具有www-data
可写权限,您可以通过ssh到机器并在/var/www/html/[your laravel app]
中的文件上执行ls -l
来检查,如果没有,请通过以下操作添加适当权限:chown -R www-data:www-data *
1.也与文件权限相关:您可以通过检查以下状态禁用SELinux(但只能在开发服务器中禁用,切勿在现场禁用):
sestatus
,然后通过setenforce 0
将其强制为0
(但是在实时服务器上,最好让SElinux保持运行,并尝试通过chcon -R -t httpd_sys_rw_content_t [path to storage folder here]
来消除问题ih99xse13#
如果你正在使用laravel sail,添加以下到你的.env文件
p3rjfoxz4#
如果您在Docker Windows桌面上使用Sail和WSL2,当您直接从 Jmeter 板启动Docker容器时会出现此问题。相反,在您的WSL2终端示例中启动容器,即
ff29svar5#
1.使用用户root:root。您可以尝试使用命令:
sudo chmod -R 777存储/
1.使用用户www-data:www-data。尝试使用命令:
sudo chown -R www-数据:www-数据存储/
sudo chmod -R 755存储器/
1.如果你用Docker,你试试命令:
存储空间-R nginx:nginx存储空间/
sudo chmod -R 755存储器/
rta7y2nd6#
下面的工作对我来说,执行两个命令在以下序列在WSL 2命令行,希望这个案例能帮助别人
1:@nam-sama给出的答案
第二个问题:@Rob-Mascaro给出的答案
44u64gxh7#
只是为了更多地强调Toosche's answer。我在尝试部署Docker PHP应用程序时遇到了这个问题。
我的工作目录是
/var/www/html
,我在Dockerfile
中添加了创建名为docker
的USER的命令。在我的
Dockerfile
中已经有了以下命令:以及启动脚本中的以下命令:
部署后,我得到下面的错误,当我尝试使用该应用程序:
无法在附加模式下打开流或文件"/var/www/html/storage/logs/laravel-2023-02-01.log ":无法打开流:权限被拒绝\n尝试记录时出现异常:数据流或文件"/var/www/html/storage/logs/laravel-2023 - 02 - 01.log\
容器在启动后会逐个创建
/var/www/html/storage/logs/laravel.log
。所以我检查了正在运行的容器中的文件和文件夹的所有权,发现了以下内容:要解决这个问题并删除重复的命令,我所要做的就是在
Dockerfile
和启动脚本中删除上面的命令,并在启动脚本中只添加下面的命令,这将授予www-data
用户和组对工作目录中所有文件和文件夹的权限:我还在composer的启动脚本中保留了以下命令:
之后我再次构建并重新部署了应用程序。这次我检查了运行容器中的文件和文件夹所有权,它们很好,如下所示:
du7egjpx8#
我遇到这个问题是因为我使用的是sail,而日志的默认目录认为我使用的是Apache。我找不到任何方法将日志位置更改为正确的存储文件夹,所以我创建了一个符号链接:
当我再次运行我的脚本时,它正确地出错了,并写入了正确位置的laravel.log文件