【问题标题】:Docker Desktop 2.2+ incredibly slow performance with host volume mountsDocker Desktop 2.2+ 主机卷挂载的性能非常慢
【发布时间】:2020-05-15 13:49:14
【问题描述】:

我有一个在文件 io 方面非常密集的构建。它涉及 70k 个松散文件以及相当数量的压缩/解压缩。

当使用主机卷挂载在 Docker Desktop 2.2+ 容器内运行时,此构建的性能会直线下降。

12 分钟 - 直接 Windows 10

19 分钟 - Docker Desktop 2.1.0.5 针对主机安装卷(Windows /c 驱动器)

71 分钟 - Docker Desktop 2.3.0.2 针对主机安装卷(Windows /c 驱动器)

2 分钟 - Docker Desktop 2.1.0.5 针对容器文件系统

2 分钟 - Docker Desktop 2.3.0.2 针对容器文件系统

即使使用 Docker 2.1.0.5 针对主机卷挂载,性能也不是很好。但是 DD 2.3 从大约 19 分钟到大约 71 分钟是令人麻木的。

还有其他人在文件 io 密集型任务上看到这种性能下降吗?

【问题讨论】:

标签: windows docker mounted-volumes


【解决方案1】:
【解决方案2】:

拿了一个类似的项目,遇到了同样的问题,我决定做一些简单的,相当于开发者使用docker挂载点相同的解决方案:

1 - 检查容器是否有rsync工具,如果没有安装。

2 - 通过 dockerfile 生成一个 shell 脚本文件,说明如下:

WORKDIR /var/www/html
RUN mkdir -p /folder-shared
RUN echo "#!/bin/bash" > sync-windows-files.sh
RUN echo 'while true; do' >> sync-windows-files.sh
RUN echo '  rsync -avu "/folder-shared/" "/var/www/html"' >> sync-windows-files.sh
RUN echo '  sleep 2;' >> sync-windows-files.sh
RUN echo 'done' >> sync-windows-files.sh
COPY . .

将命令添加到最后一行以在后台运行它:

CMD ["bash", "-c", "sh sync-windows-files.sh &]

注意:我的网络服务器正在查看 /var/www/htmldockerfile 应始终位于项目根目录中,以加快进程。

3 - 准备 DockerCompose.yml:

services:
  regulacao:
    container_name: shared-windows-files
    build:
      context: .
      network: host

    volumes:
      - ./:/folder-shared
    working_dir: /var/www/html/
    ports:
      - "8587:80"

说明: 此问题的解决方法是将 docker 共享映射到另一个目录,在这种情况下,名为 folder-shared 的目录是在构建期间在容器映像的根目录中创建的。映射目录后,您将创建一个 shell 脚本 sync-windows-files.sh,该脚本执行无限循环,将 folder-shared 共享文件夹中的文件同步到网络服务器将指向的文件夹,在我的例子中是 /var/www/html

这样问题就成功解决了,希望你能理解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-18
    • 2017-06-19
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2021-07-04
    相关资源
    最近更新 更多