Mac/OS X 上的 /var/lib/docker 在哪里

Where is /var/lib/docker on Mac/OS X

为 Mac 安装 docker 后,我正在 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/ 但在那里找不到任何东西。知道它位于何处吗?

this answer

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

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

如以上答案中所述,您将在以下位置找到它:
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

获得 tty 运行 后,您可以导航至 /var/lib/docker

此路径来自 Docker 主机(而非来自 MacOS) 在“Docker for Mac Application”之前,有一个 VirtualBox VM“默认”并且在这个 VM 内部,提到的路径存在(肯定),现在在“Docker for Mac Application” 次有一个 Docker.qcow2 image,就是qemu base vm。 跳进这个 VM @mik-jagger 的方式是可以的(但还有更多)

我会说文件:

/var/run/docker.sock

实际在:

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

如果你 运行 这个,它应该证明它,只要你的 运行ning VirtualBox 5.2.8 或更高版本和 /Volumes 的共享设置为自动 -安装和永久并且您在该版本的 Virtualbox 上生成了默认的 docker-machine:

#!/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

如果您将 Docker 用于 Mac,则此处的其他答案已过时。

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

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

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

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

当您进入时,您可能只会看到一个空白屏幕。按下 "Enter" 键。

This page 说明要退出 VM,您需要 "Ctrl-a" 然后 "d"

正如@Dmitriy所说:

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

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

然后使用screen -dr再次重新贴上屏幕(因为如果你简单地重新贴上屏幕,终端文本会乱码。)

Reference

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

有点像僵尸线程,但正如我刚刚在这里发现的那样,这是另一种既不需要屏幕也不会弄乱 shell 等的解决方案

docker volume inspect <vol_name>

中列出的路径

returns 容器的路径,类似于:

"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

运行:

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

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

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

在 Mac 中找到了一种进入 VM 内部的方法 Rocky Chen。有了这个,你实际上可以检查著名的 /var/lib/docker/volumes.

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

让我们检查方法:

  • -it 用于保持 STDIN 打开,即使未附加 + 分配伪 TTY
  • --privileged “赋予容器所有能力。允许像 运行ning docker 这样的特殊情况”。
  • --pid 定义使用主机 VM 命名空间。
  • debian 要使用的实际映像。
  • nsenter 一个 debian's tool 到 运行 不同命名空间的程序
  • -t是目标PID
  • -m 挂载提供的 PID 命名空间。
  • -u 进入 Unix 时间共享 (UTS) 命名空间。
  • -n输入提供的PID网络命名空间。
  • -i输入提供的PID IPC命名空间。

一旦 运行,转到 /var/lib/docker/volumes/,您将找到您的卷。

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

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

我很欣赏评论中的想法!

VSCODE 用户更新

如果您下载了官方 Docker 扩展程序,阳光将为您照耀。

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

第二次更新

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

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

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

Docker 日志不在 MacOS /var/lib/docker 中。

MacOs 用户可以在此路径上找到 docker 日志;

/Users/Barrack.Kenya/Library/Containers/com.docker.docker/Data/log/host

  • job_name: docker static_configs:

    • 目标:
      • docker 标签: 工作:docker日志 路径: (请输入路径)

    pipeline_stages:

    • docker:{}

对于 MacOS,我使用以下步骤:

  1. 登录 docker virtual-machine(在 MacOS 上 docker 只能在虚拟机中 运行,在我的例子中,我有带 docker 的 VirtualBox 工具虚拟机):docker-machine ssh
  2. 一旦我 logged-in 我需要从 docker 用户切换到超级用户:sudo -i
  3. 现在我可以检查 /var/lib/docker 目录