为什么在Docker容器中安装的卷的某些操作真的很慢?

我有一个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组合的开销。

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

Git实际上是在收集小文件。 当运行git状态时,它需要访问.git文件夹内的文件(在我的一个仓库里有〜150个文件),并且在每个repo文件上运行lstat()以确保它们没有被修改(更多信息在这里 )。 因此docker中的git必须请求关于每个文件的信息(需要被转移到vm)。 如果每个请求(如100毫秒)甚至有小的开销,并且在git文件夹和git中有8000个文件 – 这会导致进程花费大约8秒钟的时间。