docker中访问laravel项目很慢,非常慢,会是什么原因?

问题有些长,麻烦各位了!
我在win11系统下,安装的docker win版本,使用php容器+nginx容器搭建了一个laravel项目,项目很简单,就是laravel10版本刚下载好,之后修改了welcom的view页面,web的路由如下

docker中启动laravel项目很慢,非常慢,会是什么原因?
视图文件内容如下

docker中启动laravel项目很慢,非常慢,会是什么原因?

使用了文件目录挂载
在访问localhost时非常的慢,第一次可能要5-8秒,之后每次也在1-2秒左右,监听资源信息,cpu和内存都占用很小
我在nginx的主配置文件中增加日志记录

docker中启动laravel项目很慢,非常慢,会是什么原因?

日志内容如下

docker中启动laravel项目很慢,非常慢,会是什么原因?

其中$upstream_response_time,php处理耗时占总耗时的绝大部分,并且耗时很久
1,检查是否是DNS解析问题
在容器中下载了bind-tools,执行命令
time nslookup 到我的php容器,耗时为0.007秒

2,检查是否是php-fpm进程问题,于是进行了两次修改
第一次判断是监听地址问题,修改监听地址,原配置为
listen = 127.0.0.1:9000
后修改为
listen = 0.0.0.0:9000
无改善
第二次判断是子进程数量问题,修改相关配置,原配置为
docker中启动laravel项目很慢,非常慢,会是什么原因?
修改配置为

docker中启动laravel项目很慢,非常慢,会是什么原因?
无改善

3,于是考虑可能是文件挂载导致io访问问题,于是使用ai给出的命令进行测试
dd if=/dev/zero of=test.bin bs=1M count=100 oflag=direct
测试结果为
104857600 bytes (105 MB, 100 MiB) copied, 0.488233 s, 215 MB/s
速度很块,没有问题

4,检查是否是php性能问题
在php目录下创建test.php文件,内容为test ok
在php容器内执行命令
time php /var/www/html/test.php
返回

docker中启动laravel项目很慢,非常慢,会是什么原因?

5,检查是否是Composer自动加载性能
在php目录下创建autoload_test.php文件,内容为

docker中启动laravel项目很慢,非常慢,会是什么原因?
在php容器内执行命令
time php /var/www/html/autoload_test.php
返回

docker中启动laravel项目很慢,非常慢,会是什么原因?

最后判断是框架问题,直接访问入口文件
time php /var/www/html/public/index.php
返回

docker中启动laravel项目很慢,非常慢,会是什么原因?

耗时2秒多
最后判断是框架问题??
请问我的检查方式正确吗,是否有什么错误的地方导致遗漏问题,如果检查方式没有问题,为什么会这样?怎么能优化这个问题

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

这个问题是初学者经常会遇到的问题,原因就一句话,文件转换耗时了,解决方案有几个: 1、使用纯 wsl2 开发,就是将你的代码放在 wsl2 系统中,在 wsl2 中运行docker,启动nginx,php,MySQL等等,至于IDE打开项目,可以直接打开 WSL2 中的目录进行开发。 2、代码还是放在本地Windows上,通过IDE的部署功能,将本地代码全自动部署到 wsl2 中,不会的可以借鉴我写的博客:www.shuxiaoyuan.com/blog/info/101 或者 www.shuxiaoyuan.com/blog/info/108 3、其他的骚操作就不介绍了,还有不会的可以和我继续沟通

3周前 评论
cbasil 3周前
wxlPHP (楼主) 3周前
season886 2周前
讨论数量: 14

因为现在docker的宿主机是wsl2,所以你的文件虽然在win,但是对docker来说文件是挂载在一个网络磁盘上的,整个请求约等于win=>docker====>read win file => load code => response=>docker =>win

3周前 评论

你进入 wsl 里面的目录部署 laravel 项目, 不要在windows下直接操作。跨文件系统了。非常慢70倍差别。 最好就 直接wsl 拉代码修改,然后用 phpstorm / vscode remote 开发。这样的话,不会进行跨文件系统操作。

3周前 评论

评论的大哥们能先看完我的描述吗,不要看完标题就直接建议我不要用docker,我就是学习docker的,不用我学什么

3周前 评论
Kristiano 3周前

这个问题是初学者经常会遇到的问题,原因就一句话,文件转换耗时了,解决方案有几个: 1、使用纯 wsl2 开发,就是将你的代码放在 wsl2 系统中,在 wsl2 中运行docker,启动nginx,php,MySQL等等,至于IDE打开项目,可以直接打开 WSL2 中的目录进行开发。 2、代码还是放在本地Windows上,通过IDE的部署功能,将本地代码全自动部署到 wsl2 中,不会的可以借鉴我写的博客:www.shuxiaoyuan.com/blog/info/101 或者 www.shuxiaoyuan.com/blog/info/108 3、其他的骚操作就不介绍了,还有不会的可以和我继续沟通

3周前 评论
cbasil 3周前
wxlPHP (楼主) 3周前
season886 2周前

首先代码肯定要放在wsl里,我也用过php+nginx也是特别慢,所以不要用nginx。直接使用FROM php:8容器,然后用php artisan serve启动

3周前 评论

代码不能放在日常磁盘 要放在wsl 的目录里面,因为跨磁盘了导致的慢

3周前 评论

跟你遇到一样的问题,wsl2 跨系统 io 慢的问题。我是存2套代码,wsl2 里存一套给 docker 用,win 里存一套给 ide 用,然后用 jetbrain 【部署】功能,自动上传到 wsl2 里,缺点就是【切换代码分支】和【安装 composer】以后,需要手动再传一下文件至 wsl2

2周前 评论

这是典型的wsl下极易发生的io问题,本质原因是Windows的文件系统格式和wsl容器中的文件系统格式不同。Windows上一般为ntfs,而发行版linux大多使用ext,跨文件系统io需要每次进行转换,因此效率低下表现为io极慢。这个问题不仅发生在wsl中,其他虚拟机平台如VMware、VirtualBox进行跨文件系统io同样会发生此问题 解决办法: 1、在Windows上创建ext分区挂载到wsl容器中,这样不需要进行转换; 2、完全在wsl容器内部进行io,对于需要频繁读写的文件不应跨文件系统共享

2周前 评论

查看下容器内存大小多少

2周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!