我正在尝试在 OSX 上使用 docker beta,主要用于 Symfony 开发,但安装的卷非常慢。即使对于一个普通的 Symfony 项目,我也能获得 6 秒的页面加载时间。那是无法忍受的!有没有人找到解决这个问题的方法?试图摆脱 vagrant,但我找不到任何合理的方式来使用 docker。
9 回答
好的,用户 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
编辑键入上述命令的正确方法是来自 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 文件。
其他信息:
对于现在阅读本文的人来说,也许最好等待 Docker 解决这个问题。已接受拉取请求以提高性能(https://github.com/docker/docker/pull/31047)。这将在 2017 年 4 月的某个地方发布,应该是一个很大的改进。
我已经为 Docker for Mac 尝试了一些解决方法,但它们都有一些相当大的缺点,主要是在可用性方面。可以在以下位置找到 OSXFS 替代品的良好来源:https ://github.com/EugenMayer/docker-sync/wiki/Alternatives-to-docker-sync 。归功于 Eugen Mayer 的设置。
编辑:第一个改进是在边缘版本中实现的。https://github.com/docker/for-mac/issues/77对此有更多信息。
我花了很多时间寻找可行的解决方案。我发现了。 d4m-nfs 允许您通过 nfs 使用 docker 卷。就我而言,它使性能提高了 16 倍!(1.8 秒对 ~30 秒)
d4m-nfs 也有一个相当复杂的手册,所以这里有另一个链接详细的例子:https ://github.com/laradock/laradock/issues/353#issuecomment-262897619
我只是把这个留给其他谷歌员工。
通常卷应该很快。但是,如果您不想更改磁盘的格式,则无法更改任何内容以使它们更快。
但也许瓶颈是 CPU 或 RAM。您可以使用命令进行检查docker stats
。这些默认设置为 2 个内核和 2 GB RAM。您可以在 Docker for Mac GUI 中更改此设置。
我有完全相同的东西。对我来说,使用 docker-bg-sync(参见 GitHub)显着提高了速度和 CPU 使用率。
不如只安装卷好,因为您必须为每次同步启动一个新容器,但它可以完成工作。
在最新的 docker 17.06.0-ce-mac18 卷中,安装了 :cached 似乎运行得相当不错。
我们通过使用 syncthing 同步本地和 docker for mac 文件系统克服了这个问题。我们构建了一个遵循这种方法的开源工具,以防它有帮助: https ://github.com/okteto/cnd
我发现在 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 变得比我记得的一两个月前要慢得多。也许只有我...