wsl2上的docker非常慢

kmbjn2e3  于 2023-01-29  发布在  Docker
关注(0)|答案(7)|浏览(318)

在阅读了在wsl2上运行Docker时的性能改进之后,我一直在等待支持WSL2的Windows 10的正式发布。我更新了Windows和Docker,并打开了Docker标志以使用WSL2,并希望在Docker容器中运行的Oracle数据库能有一些性能提升,但不幸的是,这一变化大大降低了容器和我的笔记本电脑的速度。容器的性能大约慢了10倍,而且我的笔记本电脑在启动容器时几乎卡住了。似乎内存消耗将完全耗尽我的8GB,大量的内存交换开始发生。我可以做些什么来提高wsl2上Docker的性能,或者至少更好地了解我的设置中有什么问题?
我的环境:

  • 处理器英特尔(R)酷睿(TM)i7 - 2620M CPU@2.70GHz,双核
  • 安装的物理内存(RAM)8.00 GB
  • 微软 windows 10专业版版本10.0.19041内部版本19041
  • Docker版本19.03.8,构建版本afacb8b
icnyk63a

icnyk63a1#

您可能将代码存储在Windows计算机上类似于以下内容的文件夹中...

C:\\Users\YourName\projects\blahfu

但是你在WSL 2上使用Docker,这是一个不同的(Linux)文件系统。所以,当你构建Docker时,所有的代码/上下文都会从Windows文件系统复制到Linux文件系统,然后从Linux文件系统复制到Docker容器。这是最耗时的,而且非常慢。
尝试将您的项目放入这样的文件夹中...

/home/YouName/projects/blahfu

你的性能应该会大大提高。

z31licg0

z31licg02#

wsl容器有与windows文件系统隔离的适当的文件系统。基本思想是将你的源代码从windows文件系统复制到wsl文件系统。
从窗口中你可以访问wsl容器并复制你的项目到一个wsl容器:
使用资源管理器导航到\\wsl$
从这个位置重建容器这将做的伎俩!

9gm1akwq

9gm1akwq3#

如果实际Docker容器的数据存储在Windows文件系统(即NTFS)上,而不是存储在本地Linux文件系统上(不管Docker容器的内容是什么,这些内容可能已经基于Linux),那么我认为您将看到性能下降,因为您运行的是WSL,并且使用的是已安装的WINDOWS文件系统(即/c/mnt/...)中的Docker容器。
如果你把你的docker容器复制到WSL上的/usr/local或者/home//docker这样的地方,你可能会看到10倍的性能提升。

up9lanfz

up9lanfz4#

你需要编辑"vmmem"资源只是添加文件. wslconfig在路径
C:\用户. wslconfig.wslconfig
使用. wslconfig配置全局选项

Available in Windows Build 19041 and later

通过将. wslconfig文件放置到用户文件夹的根目录中,可以配置全局WSL选项:C:\Users.wslconfig。这些文件中有许多与WSL 2相关,请记住您可能需要运行.wslconfig. Many of these files are related to WSL 2, please keep in mind you may need to run
wsl-关闭
关闭WSL 2 VM,然后重新启动WSL示例,以使这些更改生效。
下面是一个示例. wslconfig文件:
控制台

Copy
[wsl2]
kernel=C:\\temp\\myCustomKernel
memory=4GB # Limits VM memory in WSL 2 to 4 GB
processors=2 # Makes the WSL 2 VM use two virtual processors

请参见此https://learn.microsoft.com/en-us/windows/wsl/wsl-config

xam8gpfp

xam8gpfp5#

如果您使用的是VS代码,则有一个名为“Remote-Containers:克隆容器卷中的存储库...”,确保您可以全速访问文件。
形成文件:
Repository Containers使用独立的本地Docker卷,而不是绑定到本地文件系统。除了不会污染文件树外,本地卷还具有在Windows和macOS上提高性能的额外优势。

bakd9h0s

bakd9h0s6#

打开wsl2发行版(例如Ubuntu)并设置~/. docker/config.json文件。
只有您需要更改:

{
  "credsStore": "docker.exe"
}

"信用卡存储":"桌面. exe":超慢(超过2分钟)
"信用卡存储":"wincred.exe":快的
"信用卡存储":"":快速
效果很好。

dddzy1tm

dddzy1tm7#

这个问题来自于“vmmem”,它会消耗尽可能多的资源。要解决这个问题,请转到您的用户文件
C:\用户\用户名
在此目录中创建一个名为“.wslconfig”的文件,在其中配置可以使用WSL2的资源数量:

[wsl2] 
memory=900MB    #Limits VM memory in WSL 2 to 900MB 
processors=1    #Makes the WSL 2 VM use one virtual processors

现在关闭您的Docker并等待“vmmem”在任务管理器中关闭。
然后,您可以重新启动Docker,通常“vmmem”不会超过您设置的限制(这里是900MB)如果不工作,请重新启动计算机。
希望对你有帮助。

相关问题