wsl2上的docker非常慢

时间:2020-06-02 14:12:32

标签: docker windows-10 wsl-2

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

我的环境:

  • 处理器英特尔®酷睿TM i7-2620M CPU @ 2.70GHz,2核
  • 已安装的物理内存(RAM)8.00 GB
  • Microsoft Windows 10 Pro版本10.0.19041内部版本19041
  • Docker版本19.03.8,构建afacb8b

7 个答案:

答案 0 :(得分:13)

这来自“ vmmem”,它消耗尽可能多的资源。 要解决该问题,只需转到您的用户文件 对我来说

C:\ Users \ userName

在此目录中,创建一个名为“ .wslconfig ”的文件,您将在其中配置多少资源可以消耗WSL2:

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

现在关闭您的泊坞窗,等待任务管理器中的“ vmmem”关闭。

然后您可以重新启动docker,通常“ vmmem”不会超过您设置的限制(此处为900MB) 如果不起作用,请重新启动计算机。

我希望它能对您有所帮助。

答案 1 :(得分:7)

您可能像在

中那样将代码保存在Windoes机器上
C:\\Users\YourName\projects\blahfu

但是您正在WSL 2上使用docker,然后在另一个文件系统上使用。因此,如果您执行docker构建,则将所有代码/上下文从Windowsfilesystem复制到Linux文件系统,然后从那里复制到docker容器。这花费了大部分时间,而且速度非常慢。

尝试将您的项目放入

/home/YouName/projects/blahfu

这应该会大大提高性能。

答案 2 :(得分:3)

wsl容器具有与Windows文件系统隔离的适当文件系统。 基本思想是将源代码从Windows文件系统复制到wsl文件系统。

您可以从窗口访问wsl容器,并将您的项目复制到wslcontainer中:

与资源管理器导航到\\wsl$

从此位置重建容器,即可完成操作!

答案 3 :(得分:1)

如果实际docker容器的数据存储在Windows文件系统(即NTFS)上,而不是存储在本地linux文件系统上(不管docker容器的内容是什么,可能已经基于linux),那么我认为运行WSL并使用已安装的WINDOWS文件系统(即/ c / mnt / ...)中的docker容器会导致性能下降。

如果将Docker容器复制到WSL上的/ usr / local或/ home // docker之类的文件,则性能可能会提高10倍。试试看,看看是否可行?

答案 4 :(得分:1)

您需要编辑“vmmem”资源 只需在路径中添加文件 .wslconfig

<块引用>

C:\Users.wslconfig

使用 .wslconfig 配置全局选项

Available in Windows Build 19041 and later

您可以通过将 .wslconfig 文件放入用户文件夹的根目录中来配置全局 WSL 选项:C:\Users.wslconfig。其中许多文件与 WSL 2 相关,请记住您可能需要运行

<块引用>

wsl --shutdown

关闭 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://docs.microsoft.com/en-us/windows/wsl/wsl-config

答案 5 :(得分:0)

如果您使用的是 VS Code,则有一个名为“Remote-Containers: Clone Repository in Container Volume...”的命令可确保您可以全速访问文件。

形成here

<块引用>

存储库容器使用独立的本地 Docker 卷而不是绑定到本地文件系统。除了不会污染您的文件树之外,本地卷还具有提高 Windows 和 macOS 性能的额外好处。

答案 6 :(得分:-3)

您可以编辑设置docker return Hyper-V。单击docker->设置->取消选中“使用基于WSL 2的引擎”。

enter image description here