首页 > 解决方案 > 当目录中有许多文件时,与 Windows 主机共享的卷内的容器中的“ls”会卡住

问题描述

背景

我在 docker 容器(Ubuntu 映像)中运行 Spring Boot 应用程序。代码是用 Kotlin 编写的,它遍历磁盘上包含 300,000 个文件的目录。
我运行以下代码:

  File(dir)
    .walk()
    .forEach{logger.info("{}", it.name)}

这段代码至少会阻塞 10 分钟。

我希望在调用 walk 后很快就会开始打印行。
事实上,当从 Intellij 运行代码时,代码可以按预期工作 - 也就是说,不是在容器中。

问题:

为什么会发生这种情况,我该如何解决?


我试过的

初审

我试过只调用 File.listfiles 并记录文件的数量,如下所示:

   val count = File(dir).listFiles().size
   logger.info("{}", count)

这也阻塞了很长时间,并最终记录了值 0。

二审

我更改了 Docker Desktop 的设置。我将 RAM 增加到 20 GB,将交换文件增加到 1 GB
这对结果没有影响。

标签: javaspring-bootdockerdocker-desktopvolumes

解决方案


根据Stefan Golubovic的评论,我意识到这个问题可能与 kotlin 或 java 无关,更可能与 Docker for Desktop 中卷的实现有关。

因此,我在这里提交了一个更集中的问题,我将关闭这个问题。


推荐阅读