【问题标题】:Where is /var/lib/docker on Mac/OS XMac/OS X 上的 /var/lib/docker 在哪里
【发布时间】:2016-11-26 17:07:51
【问题描述】:

安装 docker for Mac 后,我正在 Mac 上寻找文件夹 /var/lib/docker

docker info 我明白了

    Containers: 5
     ...
    Server Version: 1.12.0-rc4
    Storage Driver: aufs
     Root Dir: /var/lib/docker/aufs
     Backing Filesystem: extfs
     Dirs: 339
     Dirperm1 Supported: true
    ...
    Name: moby
    ID: LUOU:5UHI:JFNI:OQFT:BLKR:YJIC:HHE5:W4LP:YHVP:TT3V:4CB2:6TUS
    Docker Root Dir: /var/lib/docker
    Debug Mode (client): false
    ....

但我的主机上没有目录/var/lib/docker

我检查了/Users/myuser/Library/Containers/com.docker.docker/,但在那里找不到任何东西。知道它的位置吗?

【问题讨论】:

  • 它位于 docker 实例化的 vm 内部,以提供必要的 Linux 环境。
  • 可能是那个文件:/Users/myuser/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
  • 那是虚拟机底层的磁盘镜像,是的。但是,如果您想弄乱该目录的内容,则需要登录到 vm 本身。您可以在docs.docker.com/v1.8/installation/mac 找到相关说明
  • thx,这个文件的大小可以与 qemu-img 一起使用 resize Docker.qcow2 +5g forums.docker.com/t/…
  • 你知道在哪里可以找到这个目录吗?@christian

标签: macos docker docker-for-mac


【解决方案1】:

this answer

当使用 Docker for Mac 应用程序时,容器似乎存储在位于以下位置的 VM 中:

~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2

【讨论】:

  • 如果您从 Google 来到这里,请向下滚动以找到正确答案。
  • 我认为这就是答案。但是我现在用的是v20.10,没有~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux目录。
【解决方案2】:

如上述答案所述,您将在:
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

一旦你让 tty 运行,你可以导航到/var/lib/docker

【讨论】:

  • 稍作修改(在您的家下面,而不是在根目录下):“screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty”
  • 你可以用 ctrl + a + d 脱离屏幕
  • 分离仍将保持屏幕会话运行。你可以通过运行screen -ls 看到这一点。如果您已经分离,请运行screen -X quit。如果您有多个屏幕会话,则需要-S 来指定会话名称。如果您还没有分离,请按 ctrl + a, :, q, u, i, t, ENTER。这两个只是在会话中运行屏幕退出命令。
  • 我认为它现在可能位于 ~/Library/Containers/com.docker.docker/Data/vms/0/tty。
  • 我认为这就是答案。但是我现在用的是v20.10,没有~/Library/Containers/com.docker.docker/Data/vms/0/tty目录。
【解决方案3】:

此路径来自 Docker 主机(不是来自 MacOS) 在“Docker for Mac Application”时代之前,有一个 VirtualBox VM“默认”并且在这个 VM 内部,提到的路径存在(肯定),现在在“Docker for Mac Application”时代有一个 Docker.qcow2 图像,它是 qemu 基础虚拟机。 跳入这个 VM @mik-jagger 方式是可以的(但还有一些)

【讨论】:

    【解决方案4】:

    我会说文件:

    /var/run/docker.sock
    

    实际上是在:

    /Volumes/{DISKNAME}/var/run/docker.sock
    

    如果你运行它,它应该证明它,只要你运行的 VirtualBox 5.2.8 或更高版本,/Volumes 的共享设置为自动挂载和永久,并且你在打开时生成了默认的 docker-machine那个版本的 Virtualbox:

    #!/bin/bash
    docker run -d --restart unless-stopped -p 9000:9000 \
    -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer \
    --no-auth
    

    然后,访问 Portainer:192.168.99.100:9000 或 localhost:9000

    【讨论】:

      【解决方案5】:

      如果您使用 Docker for Mac,此处的其他答案已经过时。

      这就是我进入虚拟机的方法。运行命令:

      screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

      这是默认路径,但您可能需要先执行以下操作: cd ~/Library/Containers/com.docker.docker/Data/vms

      然后ls 查看您的虚拟机所在的目录并相应地替换“0”。

      当您进入时,您可能只会看到一个空白屏幕。点击“Enter”键。

      This page 解释说要退出虚拟机,你需要先“Ctrl-a”然后“d”

      【讨论】:

      • 不能完全正常工作,因为如果你退出VM并再次进入它,你会搞砸shell。
      • 这对我不起作用。我最终得到了一个混乱的外壳。我已经完成并杀死了以前的屏幕会话,然后再次尝试。按回车时,我得到随机字符。如果你再次按回车,新的随机字符。以此类推
      • 退出屏幕程序使用 ctl-a 然后 ctl-\ /var/lib/docker 在您运行 screen 之后所在的 VM 中,例如ls /var/lib/docker
      • 我通过screen -lsscreen -X -S SESSION_NAME quit 为每个会话摆脱了混乱的外壳。如果您使用 ctr-A 然后 D 断开连接,您可以使用 screen -R 重新连接到屏幕并获得一个干净的外壳。
      • 这个答案已经过时了。截至 2021 年 8 月 13 日,RicarHincapie 的回答是正确的。继续滚动直到找到它。
      【解决方案6】:

      正如@Dmitriy 所说:

      screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

      并且可以使用ctrl a + d 分离屏幕

      并使用screen -dr再次重新附加屏幕(因为如果你只是再次附加屏幕,终端文本会乱码。)

      Reference

      或者如果你想退出,使用ctrl + a + k,然后选择y来杀屏。

      【讨论】:

      • 这个答案已经过时了。截至 2021 年 8 月 13 日,RicarHincapie 的回答是正确的。继续滚动直到找到它。
      【解决方案7】:

      有点像僵尸线程,但正如我刚刚在这里发现的那样,这是另一种不需要屏幕或搞乱外壳等的解决方案。

      docker volume inspect <vol_name> 列出的路径

      返回容器的路径,类似于:

      "Mountpoint": "/var/lib/docker/volumes/coap_service_db_data/_data"

      _data 组件是您在使用给定卷的服务的volumes: 部分中设置的路径的最后一个组件,例如:

      volumes: - db_data:/var/lib/postgresql/data ,观察你的里程会有所不同。

      要在 mac 上到达那里,我发现最简单的方法是实际启动一个运行的小容器并将主机的根目录挂载到映像中的 /docker 目录,这样您就可以访问在主持人。

      docker run --rm -it -v /:/docker alpine:edge

      从这里你可以 cd 到卷

      cd /var/lib/docker/volumes/coap_service_db_data/_data

      【讨论】:

      • 这个答案已经过时了。截至 2021 年 8 月 13 日,RicarHincapie 的回答是正确的。继续滚动直到找到它。
      • cd /docker/var/lib/docker/volumes/coap_service_db_data/_data
      【解决方案8】:

      运行:

      docker run -it --privileged --pid=host debian nsenter -t 1 -a bash
      ls /var/lib/docker
      

      【讨论】:

        【解决方案9】:

        看起来新版本的 docker for Mac 已将其移至您可以在此处看到的 UI 元素。单击显示 CLI 的按钮将启动一个终端,您可以使用该终端浏览 docker 文件系统。

        【讨论】:

        • 图标在容器窗格中可见
        • 这只是付费版本吗?我在我的免费计划中没有看到这样的内容。我确实看到了一个 Volumes 窗格,但它明确指出 - 当我点击一个卷时 - 我需要一个 Pro 或 Team 计划才能玩。
        • 这如何回答 OP 的问题?
        【解决方案10】:

        从 2021 年开始,Mac 用户可以通过记录的方法轻松访问 VM,从而访问卷。

        有一种方法Rocky Chen 可以进入 Mac 中的虚拟机。有了这个,您实际上可以检查著名的/var/lib/docker/volumes

        docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh

        让我们看看方法:

        • -it 用于保持 STDIN 打开即使未连接 + 分配伪 TTY
        • --privileged "为容器提供所有功能。允许运行docker 等特殊情况。
        • --pid 定义使用主机 VM 命名空间。
        • debian 要使用的实际图像。
        • nsenter debian's tool 以在不同的命名空间中运行程序
        • -t 是目标PID
        • -m 挂载提供的 PID 命名空间。
        • -u 进入 Unix 分时 (UTS) 命名空间。
        • -n 输入提供的 PID 网络命名空间。
        • -i 输入提供的 PID IPC 命名空间。

        运行后,转到/var/lib/docker/volumes/,您会找到您的卷。

        我要解决的下一个问题是:

        如何获取这些卷并将它们备份到主机中?

        我很欣赏 cmets 中的想法!

        VSCODE 用户更新

        如果你下载了官方 Docker 扩展,阳光会为你发光。

        只需检查 Visual Studio Code 中的卷。右键单击要在本地拥有的文件,然后下载它们。就这么简单!

        第二次更新

        自 2021 年 7 月起,Docker Desktop for Mac 宣布我们将能够直接从 GUI 访问卷,但仅适用于 Pro 和 Team 帐户。

        【讨论】:

        • 也适用于将文件添加到卷中。通过“Inspect in Visual Studio Code”打开卷后,我将文件拖放到卷中
        • ***在 VS Code 中,右击卷并选择“在远程容器中探索”
        • 我能够使用debian nsenter 方法浏览该卷,VSCode 插件就像一个魅力,Docker 桌面希望我升级到 Pro 或 Team 计划。到目前为止,这是正确答案
        • 我正在运行 docker compose,它也使用卷。但是,此选项卡只会永久加载。我没有加载任何一卷。
        • 很遗憾,我无法使用它编辑任何文件。我尝试使用apk update 安装 nano,但它说文件是只读的
        【解决方案11】:

        我觉得新版docker(我的版本是20.10.5)使用socket代替TTY与虚拟机通信,所以可以使用nc命令代替screen命令。

        nc -U ~/Library/Containers/com.docker.docker/Data/debug-shell.sock
        

        【讨论】:

        • 你应该在 ~/Library/Containers/com.docker.docker/Data/ 路径中有 debug-shell.sock。你有吗?
        • 它有点笨拙,但对我有用。虽然我似乎无法在这个虚拟机中找到我的卷。
        猜你喜欢
        • 2012-01-14
        • 2013-12-08
        • 1970-01-01
        • 1970-01-01
        • 2013-10-31
        • 2013-03-27
        • 2015-11-05
        • 1970-01-01
        相关资源
        最近更新 更多