Docker数据卷映射+Windows=非常慢?

6

我目前正在尝试从运行在Docker容器内的Postgres数据库中复制数据到我的Windows主机。为此,我实现了一个Java应用(同样在一个Docker容器内),它使用Postgres-JDBC驱动程序及其CopyManager来将特定数据复制到映射卷中的主机。

问题:当我将数据复制到映射的Windows目录时,速度变得非常慢。(写入1 GB的数据需要约40分钟 - 没有卷映射只需1分钟)

Docker-compose:

  exportservice:
    build: ./services/exportservice
    volumes:
      - samplePath:/export_data

我已经了解到这是一个已知的问题,但是我还没有找到合适的解决方案。 我的服务必须在基于Windows的生产环境中运行。 那么,解决这个问题的方法是什么?WSL2?

期待你的建议!

2个回答

7

无论你如何操作,将一个Windows文件夹挂载到Docker容器中总是很慢的。在这方面,WSL2甚至比WSL1还要慢。

最好的解决方案是安装WSL2,将所有项目文件复制到Linux文件系统中(在Windows上以\\wsl$\<distro>\挂载),从那里运行容器,并相应地挂载Linux目录。这样可以避免任何与Windows文件的交互。

我写了一本名为“针对Web开发人员的Docker”的书和视频教程,因为我找不到好的入门教程,介绍如何创建本地开发环境。它包括Hyper-V和WSL2的说明和建议。使用折扣码dock30可享有30%的折扣。


1
非常感谢!我的API调用从31秒降至433毫秒!我现在能够继续开发了 :-D - DannyThunder
这样就可以绕过任何Windows文件交互了。现在,我只能切换到Linux进行开发,因为无法再使用任何Windows工具。 - fnagel

1
使用WSL2代替WSL并使用Linux文件系统。但是您还可以减少写入周期以减少写入开销。这可以通过在Java中使用BufferedWriter来实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接