【问题标题】:docker on OSX slow volumesOSX 上的 docker 慢卷
【发布时间】:2016-07-03 08:30:01
【问题描述】:

我正在尝试在 OSX 上使用 docker beta,主要用于 Symfony 开发,但安装的卷速度非常慢。即使对于一个普通的 Symfony 项目,我也能获得 6 秒的页面加载时间。这是无法忍受的!有没有人找到解决这个问题的方法?试图摆脱 vagrant,但我找不到任何合理的方式来使用 docker。

【问题讨论】:

标签: macos docker docker-for-mac


【解决方案1】:

好的,用户 Spiil 提供了一个解决方案,但我想详细说明要采取的确切步骤,因为我花了 12 个小时试图弄清楚,但是一旦你知道它是多么简单并解决了所有减速问题!

这里的关键是要了解此解决方案创建 NFS(网络文件系统)驱动器作为从 Docker 容器到您的 Mac 的通信方式,而不是标准的 OSX 文件系统,目前由于错误或方式非常慢它有效*

完全按照这些步骤操作。

1.) 在你的主目录中克隆这个 repo (https://github.com/IFSight/d4m-nfs)。为此,请打开终端并输入 cd ~

然后输入git clone https://github.com/IFSight/d4m-nfs

或者,您也可以在一个班轮中执行此操作git clone https://github.com/IFSight/d4m-nfs ~/d4m-nfs

2.) 接下来进入 d4m-nfs 文件夹并在 /etc 文件夹中创建一个新文件并将其命名为 d4m-nfs-mounts.txt

3.) 在其中添加以下代码行。

/Users/yourusername:/Users/yourusername:0:0

以上内容允许您仍然使用 docker-compose 的相关文件夹,并允许所有端口在其上连接,因此是 0:0。

编辑 不要把 /Volumes 放在这里!!

4.) 转到您的 docker 首选项并执行以下操作

确保只显示 /tmp 而没有其他内容。我的意思是,如果有其他任何东西,它就不会起作用,因为它会与脚本稍后为您创建的 NFS 系统产生冲突。重新启动 docker 和 docker-compose down 任何容器。

5.) 最后导航到我们在步骤 1 中创建的 d4m-nfs 目录并输入以下命令,/bin/bash d4m-nfs.sh

edit 键入上述命令的正确方法是 github (if-kenn) 的另一个用户指出,./d4m-nfs.sh 使用 Shebang 来运行它。

如果正确完成,应该没有错误,这应该可以工作。请注意不要以 sh d4m-nfs.sh 运行,这将产生错误,您必须删除导出文件才能重新开始。事实上,无论何时您进行任何更改,您都必须清除您的导出文件。

这就是我的样子。

编辑:: 重要——删除 /private 和卷!现在应该只是用户/用户名!

如果您看到除此之外的任何内容,则说明您没有使用 bash。如果出现任何错误,您可以在 Mac 中快速访问这样的导出文件,然后将其清除以重新开始。

只需选择转到文件夹

然后输入/etc/exports

这是一个很好的快捷方式,可以快速找到它并在您最喜欢的文本编辑器中将其清除。

还要确保没有容器正在运行,否则您将陷入 ........ 死循环。如果这种死循环继续,请确保升级 docker,然后重新启动计算机。是的,重新启动......这似乎是让它在我朋友的电脑上工作的唯一方法。参考这个(https://github.com/IFSight/d4m-nfs/issues/3

注意....循环。我最近找到了另一个解决方案。确保您没有以 root 身份登录,并确保您将 git repo 拉入您的用户 ~ 文件夹而不是 root ~ 文件夹。换句话说,它应该在用户/用户名中。

此外,请确保 /tmp 文件夹具有完整的写入权限,因为脚本需要在此处写入,否则这也不起作用。 chmod 777 -R /tmp

6.) 如果您在运行脚本时正确操作,它将如下所示。

然后像往常一样在您的 symfony 项目文件夹(或您与 docker 一起使用的任何项目)中运行 docker-compose up -d ,一切都应该正常...除了不再减速!

您需要在重新启动计算机或 docker 时运行此程序。

另外请注意,如果出现安装错误,您可能没有将项目存储在用户/用户名目录中。请记住,这是我们安装它的地方。如果您的项目位于其他地方,则需要相应地修改 d4m-nfs-mounts.txt 文件。

其他信息:

【讨论】:

  • 只是一个简单的问题,这个解决方案比这里的解决方案更快吗?forums.docker.com/t/how-to-speed-up-shared-folders/9322/15 我想我不妨使用更好的:) 任何指针都会有帮助
  • 是的,因为这基本上是使用共享文件夹的方式
  • 你好约瑟夫。所以...快到 2022 年了。这仍然是 d4m 卷的最佳解决方案吗?
  • 我不确定,因为我已经很久没有遇到这个问题了,您是否仍然遇到缓慢的问题?
  • 是的。我对 docker for mac 完全失望。所以我现在正在virtualbox下的ubuntu上工作,没有从mac主机挂载卷。
【解决方案2】:

对于现在阅读本文的人来说,也许最好等待 Docker 解决这个问题。已接受拉取请求以提高性能(https://github.com/docker/docker/pull/31047)。 这将在 2017 年 4 月的某个地方发布,应该是一个很大的改进。

我已经尝试了一些适用于 Mac 的 Docker 的解决方法,但它们都有一些相当大的缺点,主要是在可用性方面。可以在以下位置找到 OSXFS 替代方案的良好来源:https://github.com/EugenMayer/docker-sync/wiki/Alternatives-to-docker-sync。归功于 Eugen Mayer 的设置。

编辑: 第一个改进是在边缘版本中实现的。 https://github.com/docker/for-mac/issues/77 有更多相关信息。

【讨论】:

    【解决方案3】:

    There's a long thread with explanation from Docker Team 和各种解决方法。

    目前,the issue is being tracked on GitHub

    虽然有些变通方法可能比其他变通方法更好,但恐怕目前理想的选择是切换到 Linux。

    【讨论】:

      【解决方案4】:

      我花了很多时间寻找可行的解决方案。我发现了。 d4m-nfs 允许您通过 nfs 使用 docker 卷。 就我而言,它使性能提高了 16 倍! (1.8 秒 vs ~30 秒)

      d4m-nfs 也有相当复杂的手册,所以这里有另一个链接,里面有详细的例子:https://github.com/laradock/laradock/issues/353#issuecomment-262897619

      我只是把这个留给其他谷歌员工。

      【讨论】:

      • 这个看起来很有希望。想知道是否有一些 TL;DR 说是否有可能实现简单的 docker run --rm -v oneliner 即用于 mvn install/grunt build 目的
      • 我在尝试按照说明操作时遇到错误,您能否逐步解释您为解决这些问题所做的工作?
      • 我的错误如下,ERROR: for dbdev Cannot start service dbdev: Mounts denied: /docker-for-mac/osxfs/#namespaces 了解更多信息。 . /distribution/db_data_dev 不从 OS X 共享,并且不为 Docker 所知。您可以从 Docker -> Preferences... -> File Sharing 配置共享路径。请参阅docs.docker.com 错误:启动项目时遇到错误。
      • 好的,我发现了这个问题 :),在这里参考这个问题,github.com/IFSight/d4m-nfs/issues/38
      • 我在下面的回答中详细说明了您的回答,以帮助其他用户。
      【解决方案5】:

      通常卷应该很快。 但是,如果您不想更改磁盘格式,则无法更改任何内容以使它们更快。

      但瓶颈可能是 CPU 或 RAM。 您可以使用命令docker stats 进行检查。这些默认设置为 2 个内核和 2 GB RAM。您可以在 Docker for Mac GUI 中更改此设置。

      【讨论】:

      • 嗯,它甚至没有接近原生速度。运行一个简单的基准安装卷比原生卷慢约 15。我不认为 CPU 或 RAM 是瓶颈,因为这只发生在我使用挂载卷时。如果我将整个代码库放入容器中,我将获得金属速度。 CPU 或 RAM 的使用比我使用 VM 时要低得多。
      • 是的,具有本机速度的是 linux,具有相同的格式并且没有管理程序。但是 Docker for Mac 卷比 VM 更快
      • 比带有 nfs 的 VM 更快?对于普通 symfony 应用程序的 NFS 安装卷,VM 中的页面加载时间约为 60 毫秒,而不是使用 docker beta 时为 6 秒。
      • 我不知道 NFS 和 HFS+ 的区别,但是 NFS 使用完全不同的方式,所以它可以更快(并且你可以使用主机网络驱动程序)
      • 好的,但是它现在是如何工作的,除非有解决方法,否则不可能将它用于任何严肃的开发。
      【解决方案6】:

      我也有同样的事情。对我来说,使用 docker-bg-sync (see on GitHub) 显着提高了速度和 CPU 使用率。

      不如只安装卷好,因为您必须为每次同步启动一个新容器,但它可以完成这项工作。

      【讨论】:

        【解决方案7】:

        在使用 :cached 挂载的最新 docker 17.06.0-ce-mac18 卷中似乎运行得相当不错。

        【讨论】:

        • 我不这么认为。我将 docker 17.06.0-ce-mac18 (18433) 用于 Ruby on Rails 应用程序。但它的速度仍然很糟糕。
        • 但是您是否使用 :cached 安装了卷?您必须更改 docker-composer.yml 文件或传入 cli。我用 vanilla Symfony3 进行了测试,页面速度约为 200 毫秒,比 6 秒要好得多 :)
        • 我有cached 卷由volumes: - .:/project_name:cached 提供,但它似乎不起作用。速度还是很慢。网页需要很长时间才能加载。
        • 经过一个非常大的项目测试,加载页面需要 4-6 秒。以前是60多岁。在我看来这是相当不错的。 :)
        • 哦……这不是我的情况……可能我做错了什么,我会检查文档。但是我正在使用 docker-sync 并且非常好。
        【解决方案8】:

        我发现在 Parallels 下创建 CoreOS VM,然后使用 CoreOS 内部的 Docker 比 Docker for Mac(当前运行版本 17.12.0-ce-mac49 (21995))快得多。

        我正在使用 CMAKE/Ninja/GCC 进行 Linux 代码构建,它的速度几乎是 Docker for Mac 构建的两倍。

        在我的例子中,我有大量作为容器一部分的库源(例如 Boost、OpenSSL),以及相当数量的 C++ 代码,它们保存在我的 Mac 本地。

        这似乎是最近的发展。 Docker/Mac 变得比我记得的一两个月前要慢得多。也许只有我……

        【讨论】:

        • 还有 ubuntu 在 vi​​rtualbox 下用 docker 运行速度比 D4M 快
        【解决方案9】:

        我们通过使用 syncthing 同步本地和 docker for mac 文件系统克服了这个问题。我们构建了一个遵循这种方法的开源工具,以防它有帮助: https://github.com/okteto/cnd

        【讨论】:

        • 它是否处理删除?或者你必须做一个干净的同步?这是任何同步策略的主要问题。
        • 它可以处理所有 syncthing 支持的东西:docs.syncthing.net/users/config.html 特别是它有ignoreDelete 选项。
        • 是的,当您实际删除文件时删除,但是当您 git checkout 不包含与当前分支相同文件的不同分支时,情况会怎样。据我记得,syncthing 留下了这些文件,使我无法使用它。不确定去年是否发生了变化,但我怀疑这是我迄今为止测试过的所有同步策略的问题。
        • 我刚刚使用github.com/okteto/cnd 测试了您的场景,并且执行git checkout 会删除远程服务器上的文件。在任何情况下,在cnd 的上下文中,远程服务器是一个容器,您可以自动在每次结帐后重新创建容器。
        • 是的,但我打算在开发中使用它来加速来自 osx 的慢卷。 :)。我会检查的。
        猜你喜欢
        • 2014-12-08
        • 2019-11-26
        • 1970-01-01
        • 1970-01-01
        • 2021-03-24
        • 2015-06-05
        • 2021-02-07
        • 2016-03-10
        • 2016-03-30
        相关资源
        最近更新 更多