IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    使用Docker for Mac时osxfs的cpu占用率过高

    Blackrose发表于 2017-01-20 13:09:44
    love 0

    打算在Docker内编译Linux内核,直接用volume参数把磁盘挂载进容器内,编译时发现cpu被占用达80%。搜索后知道是volume方式由osxfs组件来服务container和host之前的文件共享,但osxfs对fsevent处理不够好,出现了IO占用CPU资源问题。目前,可以使用的方法是NFS, unison, rsync。NFS不被推荐的原因是对权限管理不好,rsync又是单向的。所以这里使用unison,第一次同步要很长时间后,后续更新都很快,重要的是可以双向功能,container的修改也可以同步到host上。

    unison方式的大概原理是,把需要同步的文件或磁盘以socks协议方式同步到container1内,container1把这个目录以volume方式共享出来,这样其它container直接用共享的volume就可以了。socks是在本机上传输所以速度还是比较快的,也绕开了osxfs组件。

    同步目录至unison的docker内

    docker pull onnimoni/unison
    docker run -d -p 5000:5000 --name unison-sync -e UNISON_DIR=/data -v /data onnimonni/unison
    pip install MacFSEvents
    curl -o /usr/local/bin/unison-fsmonitor -L https://raw.githubusercontent.com/hnsl/unox/master/unox.py
    chmod a+x /usr/local/bin/unison-fsmonitor
    unison /Volumes/data socket://127.0.0.1:5000/ -auto -batch -repeat watch
    

    在目标container中使用共享的volume,这样在新开的container内的/data目录就能看到host上的/Volumes/data目录下的文件了

    docker run -it --volumes-from unison-sync debian /bin/bash
    


沪ICP备19023445号-2号
友情链接