Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wsl2上的docker非常慢_Docker_Windows 10_Wsl 2 - Fatal编程技术网

wsl2上的docker非常慢

wsl2上的docker非常慢,docker,windows-10,wsl-2,Docker,Windows 10,Wsl 2,在阅读了在wsl2上运行Docker时的性能改进之后,我一直在等待支持wsl2的Windows10正式发布。 我更新了Windows和Docker,打开了Docker标志以使用wsl2,并希望在Docker容器中运行的Oracle数据库能够获得一些性能提升,但不幸的是,这一更改大大降低了容器和笔记本电脑的速度。 容器的性能大约慢10倍,我的笔记本电脑在启动容器时几乎卡住了。 似乎内存消耗将完全耗尽我的8GB,大量内存交换开始发生。 我可以做些什么来提高wsl2上Docker的性能,或者至少更好地

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

我的环境:

  • 处理器Intel(R)Core(TM)i7-2620M CPU@2.70GHz,2核
  • 已安装的物理内存(RAM)8.00 GB
  • Microsoft Windows 10 Pro版本10.0.19041内部版本19041
  • Docker版本19.03.8,构建afacb8b
这来自“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
现在关闭docker并等待“vmmem”在任务管理器中关闭

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


我希望它对您有所帮助。

您可能在Windoes机器上有您的代码,如中所示

C:\\Users\YourName\projects\blahfu
但是您在WSL2上使用docker,WSL2在另一个文件系统上。因此,如果您进行docker构建,您会将所有代码/上下文从Windows文件系统复制到Linux文件系统,然后从那里复制到docker容器。这占用了大部分时间,而且速度非常慢

试着把你的项目放到

/home/YouName/projects/blahfu

这将大大提高性能。

如果实际docker容器的数据存储在windows文件系统(即NTFS)上,而不是存储在本机linux文件系统上(无论docker容器的内容是什么,可能已经基于linux),然后,我认为您将看到性能下降,因为您正在运行WSL,并使用安装的WINDOWS文件系统(即/c/mnt/…)中的docker容器


如果您将docker容器复制到WSL上的/usr/local或/home//docker,那么您可能会看到性能提高10倍。试试看它是否有效?

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

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

使用资源管理器导航到
\\wsl$


从这个位置重建容器,这样就可以了

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

表格:

存储库容器使用隔离的本地Docker卷,而不是绑定到本地文件系统。除了不会污染您的文件树之外,本地卷还可以在Windows和macOS上提高性能

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

C:\Users.wslconfig

Available in Windows Build 19041 and later
使用.wslconfig配置全局选项

Available in Windows Build 19041 and later
您可以通过将.wslconfig文件放置到用户文件夹的根目录中来配置全局WSL选项:C:\users.wslconfig。其中许多文件与WSL2相关,请记住您可能需要运行

wsl—关机

关闭WSL2VM,然后重新启动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

请看此

我认为需要有关您的硬件规格和所有相关软件版本的信息。我也有这个问题,我有16gb的内存,vmmem进程正在消耗大部分内存。顺便说一句,这方面存在一个问题:当我们所有wsl2用户都在搜索如何处理卡住的窗口时……类似的问题,但是有很多记忆,在构建过程中非常感谢您的回答。Docker应该提供设置这个或什么的。是Microsoft在
.wslconfig
上的文档供参考。使用
.wslconfig
文件可以减少资源消耗,但实际上会使容器本身比以前更慢。我想我只是没有足够的内存,将不得不继续使用Docker而不利用wsl2。我发现通过
.wslconfig
这样限制内存对Docker的性能产生了巨大的影响。没有它,Docker似乎会尽可能多地使用资源。在我的16GB机器上将Docker限制为
内存=6GB
,这使得与Docker一起工作变得更好。最佳设置可能取决于可用的RAM和您对Docker所做的操作,但我猜在许多情况下,将其设置为(相当多!)超过500MB可能是明智的!这一调整对我也产生了巨大的影响
Vmmem
docker build
期间编译程序时消耗了我机器上所有可用的CPU。我的机器在编译陷入停滞的同时,几个小时都没有响应,不得不
杀死-9
docker进程。将
内存
处理器
分别设置为系统可用内存的一半后,相同的构建在约10分钟内完成。谢谢这避免了我对WSL如此厌倦以至于放弃。谢谢。我不确定我是否理解,但在我的例子中,我有一个带有Oracle数据库的Linux容器,所有数据都在容器本身内。@doberkofler在开发过程中,您应该装载您的sour