在Mac/OS X上,/var/lib/docker在哪里?

233

我在安装了Mac版Docker之后,希望能够找到文件夹/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/,但是在那里找不到任何内容。你有任何想法它位于哪里吗?


13
它位于Docker实例化的虚拟机内部,为提供必要的Linux环境而设立。 - larsks
1
这是可能的,文件路径为:/Users/myuser/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 - christian
1
那是虚拟机底层的磁盘映像,没错。但如果你想要操纵该目录的内容,你需要登录到虚拟机本身。你可以在https://docs.docker.com/v1.8/installation/mac/找到如何登录的说明。 - larsks
谢谢,使用qemu-img resize Docker.qcow2 +5g可以调整此文件大小。https://forums.docker.com/t/consistently-out-of-disk-space-in-docker-beta/9438 - christian
你知道在哪里找到这个目录吗?@christian - Jason Xu
@jason 不是很确定,我认为它嵌入在 /Users/myuser/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-‌​linux/Docker.qcow2 中。 - christian
13个回答

182

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

一旦您启动了tty,就可以导航至/var/lib/docker


4
稍作修改(在您的主目录下,而不是根目录下):“screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty” - pdenti
6
您可以使用 Ctrl + A + D 与屏幕分离。 - Mik jagger
13
分离会使屏幕会话仍在运行。您可以通过运行screen -ls来查看这一点。如果您已经分离,请运行screen -X quit。如果您有多个屏幕会话,您需要使用“-S”来指定会话名称。如果您尚未分离,请按下ctrl + a,:,q,u,i,t,ENTER。这两个命令只是在会话中运行屏幕退出命令。 - dosentmatter
19
我认为它现在可能位于~/Library/Containers/com.docker.docker/Data/vms/0/tty。 - Richard Collette
14
我认为这就是答案,但是我现在正在使用v20.10版本,~/Library/Containers/com.docker.docker/Data/vms/0/tty目录不存在。 - Tony Chou
显示剩余6条评论

110
截至2021年,使用已记录的方法,Mac用户可以轻松地进入虚拟机并访问卷。Rocky Chen发现了一种在Mac中进入虚拟机的方法。通过这种方法,您实际上可以检查著名的/var/lib/docker/volumes。让我们来看看这种方法:-it表示保持STDIN打开,即使未连接也分配伪终端;--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/,您将找到您的卷。下一个问题是:如何将这些卷备份到主机?感谢评论区的想法!对于VSCODE用户的更新:如果您下载了官方的Docker扩展,太阳将为您照耀。

Docker Extension

在Visual Studio Code中检查卷。右键单击要在本地拥有的文件并下载它们。如此简单!
第二次更新
截至2021年7月,Docker Desktop for Mac宣布我们将能够直接从GUI访问卷,但仅适用于专业版和团队账户。

enter image description here


在 VS Code 中,右键点击卷并选择“在远程容器中浏览”。 - Joshua Swain
1
我能够使用 debian nsenter 方法浏览卷,VSCode 插件运行良好,Docker Desktop 要求我升级到 Pro 或 Team 计划。截至目前,这是正确的答案 - Erick G. Hagstrom
很遗憾,我无法编辑任何文件。我尝试使用“apk update”安装nano,但它显示这些文件是只读的。 - Ari Seyhun
2
备份命令:docker run -v <volume_name>:/volume --rm loomchild/volume-backup backup - > <volume_name>.tar.bz2 - elquimista
1
"docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh" 这个命令对我来说很有效,可以进入 Docker VM。 - TechGeorgii
显示剩余4条评论

60

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

以下是我如何进入虚拟机的方法。运行以下命令:

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

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

然后执行ls以查看您的VM在哪个目录中,并相应地替换“0”。

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

此页面解释了要退出虚拟机,您需要按“Ctrl-a”,然后再按“d”。


因为如果您退出VM并重新进入,您将获得混乱的shell,所以它不完全可行。 - AbstractVoid
2
这对我不起作用。结果我得到了一个混乱的 shell。我已经杀掉了之前的屏幕会话,然后再试一次。当按下 enter 键时,我会得到随机字符。如果再次按 enter 键,会出现新的随机字符。以此类推。 - Steig Hallquist
1
要退出屏幕程序,请使用ctl-a然后ctl-\。/var/lib/docker在您运行screen之后的VM中,因此例如ls /var/lib/docker等。 - Alex Martian
1
我通过 screen -ls 命令清除了混乱的 shell,然后对于每个会话使用 screen -X -S SESSION_NAME quit 命令。如果你使用 ctr-A 然后 D 断开连接,你可以使用 screen -R 重新连接到屏幕并获得一个干净的 shell。 - Andreas Riedmüller
1
这个答案已经过时了。截至2021年8月13日,RicarHincapie的答案是正确的。请继续向下滚动直到找到它。 - Erick G. Hagstrom

56

请参考这个答案

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

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


94
如果你是从谷歌来到这里的,请往下滑动以找到正确的答案。 - user1717828
7
我认为这就是答案。但是我现在使用的是v20.10,~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux 目录已经不存在了。 - Tony Chou

15

正如 @Dmitriy 所说:

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

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

再次使用 screen -dr 重新连接屏幕(因为如果您只是简单地重新连接屏幕,终端文本会混乱)。

参考链接

如果想要退出,请使用 ctrl + a + k,然后选择y来关闭屏幕。


这个答案已经过时了。截至2021年8月13日,RicarHincapie的答案是正确的。请继续向下滚动直到找到它。 - Erick G. Hagstrom

13

我认为最新版本的docker(我的版本是20.10.5)使用套接字而不是TTY与虚拟机进行通信,因此您可以使用nc命令代替screen命令。

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

你应该在~/Library/Containers/com.docker.docker/Data/路径中拥有debug-shell.sock。你有吗? - Ehsan Ahmadi
虽然有点不稳定,但对我来说还是能用的。不过我似乎还找不到这个虚拟机中的卷。 - justin.m.chase

7

虽然本帖有点像僵尸线程,但我刚刚找到了另一个解决方案,不需要 screen,也不会弄乱 shell 等等。

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 /var/lib/docker/volumes/coap_service_db_data/_data


这个答案已经过时了。截至2021年8月13日,RicarHincapie的答案是正确的。请继续向下滚动直到找到它。 - Erick G. Hagstrom
cd /docker/var/lib/docker/volumes/coap_service_db_data/_data - Mohammad Alavi

4

看起来 Docker 的新版本已将此功能移至 UI 元素,您可以在此处查看。单击名为 CLI 的按钮将启动一个终端,您可以使用它浏览 Docker 文件系统。Docker CLI Button


图标可在容器面板上看到。 - akauppi
这只在付费版本上吗?我在我的免费计划中看不到这样的内容。我看到一个卷面板,但它明确说明——当我点击一个卷时——我需要一个专业版或团队计划来播放。 - Erick G. Hagstrom
这如何回答 OP 的问题? - Fusion

1
我使用以下步骤在MacOS上运行docker:
  1. 登录到docker虚拟机(在MacOS上,docker只能在虚拟机内运行,在我的情况下,我使用带有docker VM的VirtualBox工具):docker-machine ssh
  2. 一旦我登录,我需要从docker用户切换到超级用户:sudo -i
  3. 现在我可以检查/var/lib/docker目录了

请注意,本文中保留了HTML标签。

1

运行:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接