php - 在 Windows 10 WSL2 上使用 Devilbox 的 Docker 2.3.0.4 非常慢
问题描述
我有 Windows 10 2004,8 核 amd cpu,12gb ram,运行现有的 wsl2 debian 实例就好了。我可以使用现有的 WSL 运行典型的 Web 堆栈 php-fpm nginx mariadb redis-server,并且性能很好。我一直在阅读 wsl2 和 docker 现在好多了,并想尝试一下。
我用 wsl2 安装了 docker 2.3.0.4 并安装了 devilbox 作为 web 堆栈。
我已使用 .wslconfig 文件将 wls 进程限制为 4gb 和 4 cpus,这一切都很酷并且工作正常。
不能正常工作的是一个简单的 php 页面(例如<?php echo time(); ?>
,可能需要 15-30 秒才能显示出来!任何与数据库对话的内容都会产生 90 秒的加载时间。运行一个标准的空 wordpress 网站是不可能的。在 WSL2 上的 nginx/debian 上运行相同的脚本/站点/数据库效果很好。
Windows 重新启动后我无法运行 docker 桌面应用程序(它在我重新启动之前工作)。当我启动它时,放置在我桌面上的图标 docker 安装程序不会执行任何操作。我没有看到任务管理器中出现进程。似乎没有什么崩溃,它只是不起作用。我可以右键单击托盘中的泊坞窗图标,然后以这种方式进入仪表板。无论如何,我通常在命令行工作,所以没什么大不了的,我想我会提到它。
devilbox 安装设置了一个本地 Web 服务器,并且一切正常。我不得不docker-compose up
多次让它正确拉动容器,但后来我的互联网确实很糟糕。Web 界面非常简洁,我可以启动 phpmyadmin 之类的工具,并且它们加载良好。如果我尝试恢复一个包含 100 个表的 10mb 数据库,它将超时并崩溃和烧毁。即使我的磁盘负载达到 90% 并在那里停留 5 分钟,通过 mysql 通过 shell 恢复相同的数据库也可以正常工作。
我创建的任何虚拟主机 Web 服务器的性能都很差。php 页面大约需要 90 秒才能显示出来。带有 phpinfo() 的页面可能需要 45-90 秒的白屏才能显示出来。
与同一环境中 WSL2 上的直接 linux 相比,我如何弄清楚为什么 docker 如此糟糕?我猜这与 io bit windows 任务管理器有关,说磁盘 io 平均负载为 2%。
解决方案
我认为这是 docker 卷和 windows 文件共享的问题。即使你使用 WSL2 也不意味着你使用 linux 文件系统。如果您使用来自 windows 系统的文件,例如:d:/workspace/myproject
,它是 windows 文件和文件夹,windows 将在从 docker 执行任何操作之前读取并扫描它们。
我找到了解决方案。它是在 WSL 发行版中安装您的项目。打开你的 linux 发行版,对我来说是 Ubuntu 18.0,你将从 开始,在/home/%USER_PATH%
这里安装你的项目,例如:/home/mypc/workspace/myproject
您可以将您的 IDE 远程到 WSL,在 VSCode 中,它通过扩展远程 WSL 支持。这使您的项目只能在 linux 文件系统上运行,而不是与 windows 共享,而且速度更快
推荐阅读
- testing - 如何为空手道中的数据驱动测试准备嵌套数据结构?
- javascript - 在odoo中更改span标签中的图像而没有图像的ID
- sed - 如何在json数组中格式化mac地址
- algorithm - 枚举代数表达式的所有排列的算法
- javascript - Cookie 同意阻止其余的 JavaScript
- java - 删除未选中的 Regex Java
- java - 将 Spring Boot 应用程序属性绑定到 java.util.properties
- powerbi - 多个结果 - 查询失败
- discord - Presence.activity.game 没有显示游戏
- java - Volley 每次都从 SERVER 获取数据而不是缓存