【问题标题】:Docker volume mapping + windows = incredible slow?Docker 卷映射 + windows = 难以置信的慢?
【发布时间】:2021-03-24 21:04:01
【问题描述】:

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

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

Docker 撰写:

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

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

期待您的建议!

【问题讨论】:

    标签: java postgresql docker docker-compose docker-for-windows


    【解决方案1】:

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

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

    我编写了 Docker for Web Developers 书籍和视频课程,因为我找不到很好的入门教程来解释如何创建本地开发环境。它包括 Hyper-V 和 WSL2 说明和建议。使用折扣代码dock30 可享受 30% 的折扣。

    【讨论】:

    • 非常感谢!我的 API 调用从 31 秒缩短到 433 毫秒!我现在可以再次开发了:-D
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多