V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aleechou
V2EX  ›  Docker

请教: Docker for Mac 如何在不外挂目录的情况下,直接访问容器里的文件 ?

  •  
  •   aleechou · 2016-12-28 18:49:18 +08:00 · 8841 次点击
    这是一个创建于 2889 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 Linux 上是可行的,用 docker inspect <容器 id> , 查看 GraphDriver 里 overlay 类型的目录,例如:

            "GraphDriver": {
                "Name": "overlay",
                "Data": {
                    "LowerDir": "/var/lib/docker/overlay/59f07724ebb1ea7ed1beb73957545c27b23b8b40fc05d7d20bdaa2bd07d5c972/root",
                    "MergedDir": "/var/lib/docker/overlay/7ed602749564139b0bc2f31245400305b163499bd42e53350c1d32fbc338e652/merged",
                    "UpperDir": "/var/lib/docker/overlay/7ed602749564139b0bc2f31245400305b163499bd42e53350c1d32fbc338e652/upper",
                    "WorkDir": "/var/lib/docker/overlay/7ed602749564139b0bc2f31245400305b163499bd42e53350c1d32fbc338e652/work"
                }
            },
    

    直接访问那个 merged 目录就行了。

    但是,在 mac 上, docker engine 是运行在一个 xhyve 虚拟机里,容器则是第二层虚拟机。 所以 docker inspect 拿到的是 xhyve 虚拟机里的路径,并不是物理机里的路径, 在 mac 上并没有这些目录。

    而 xhyve 虚拟机使用得不是 aufs, 而是一个 qcow2 格式的镜像文件,一般在这个位置: Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2。 这个镜像文件,不能在 docker 服务运行时 mount 它 。

    我要访问得,其实就是这个镜像文件里的 /var/lib/docker/overlay/ 目录。

    我想知道,有没有什么办法,在 mac 上透过 xhyve 虚拟机,直接访 docker 容器里的文件系统。 例如用 sshfs 去 mount xhyve 里的 /var/lib/docker/overlay/ 目录?

    3 条回复    2018-04-14 16:42:22 +08:00
    shyling
        1
    shyling  
       2016-12-28 20:04:43 +08:00
    为什么不直接用 docker cp 呢 0v0
    不然就 exec sshd,然后外部再去连?
    Tianny
        2
    Tianny  
       2018-03-15 14:02:11 +08:00   ❤️ 1
    dylan
        3
    dylan  
       2018-04-14 16:42:22 +08:00
    也可以用 qemu-nbd 加载成网络驱动器再读取。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1075 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:43 · PVG 03:43 · LAX 11:43 · JFK 14:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.