为什么Docker容器中挂载卷上的某些操作确实很慢?

时间:2014-10-24 18:00:31

标签: docker boot2docker

我在OSX上有一个开发Docker容器,带有boot2docker。

我连接到容器并通过...将我项目的源目录挂载到docker容器中。

docker run -it -p 8080:8080 -v /local_src:/container_src foo/bar /bin/bash

当在container_src内部时,某些操作非常慢。例如,git status大约需要8秒钟才能完成。

但是,如果我使用克隆到容器中的源

,一切正常

关于为什么会这样做的任何想法?

我想知道安装卷和使用boot2docker是否会产生一些开销。

1 个答案:

答案 0 :(得分:0)

(我不是这个领域的专家 - 只是得出一些结论)

Git实际上是在收集小文件。当运行git status时,它需要访问.git文件夹中的文件(在我的一个寄存器上的~150个文件)并在repo中的每个文件上运行lstat()以确保它们不被修改(更多信息{{3} })。因此,docker中的git必须请求有关每个文件的信息(需要转移到vm)。如果每个请求的开销都很小(比如100毫秒),并且你在git文件夹和git中有8000个文件 - 这会导致进程花费大约8秒。