windows上使用dockerIO特别慢有没有更优的解决方案?

问题

部门目前使用docker来部署开发环境[lnmp],由于有一些旧的项目,会引入大量的库文件,因此在windows上经常一个接口请求需要十几秒,而在原生的linux机器上同样的环境几乎不需要1秒就可以响应.
后来查阅资料发现是因为IO的问题,读取文件速度太慢导致...黑人问号...
目前的一个临时解决方案是把项目代码放到虚拟机中,然后由samba把项目挂载到windows,但是这样有个问题就是在虚拟盘上使用svn特别慢

想问一下大佬们有没有其他更优的解决方案,不要太复杂搞什么文件同步

阅读 10.2k
2 个回答

复制一个大佬的回答

Docker for Windows是在Hyper-V虚拟机上跑Linux,文件挂载是通过SMB协议从Windows挂载到Linux,文件读写都经过网络,遇到Laravel这种每次启动就要加载几百个文件的框架,文件性能问题就尤其明显。

最好的验证方法就是进到容器里,strace一下php-fpm进程,看下系统调用的耗时,你就会发现大部分时间都是在stat或read,所以解决的思路就是减少网络文件系统的读写。

方案0: 开opcache,减少read调用

方案1:不使用SMB协议挂载文件,通过union、rsync之类的工具同步文件修改。

方案2: 用WSL2

方案3:修改cifs内核模块,单独加大vendor目录的缓存时间,因为vendor目录下的文件很少变更,加大文件信息的缓存时间可以减少大量网络调用。加上方案0,响应时间从1秒减少到0.1秒。(现在我就在用这个方案,自己在Hyper-V跑Arch Linux + 修改过的cifs模块化 + docker)

Github有相关的讨论:Shared Volumes Slow ,基本都是方案0-2。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏