首页 > 解决方案 > 在 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%。

标签: phpdockerdevilbox

解决方案


我认为这是 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 共享,而且速度更快


推荐阅读