runc和ctr命令不显示docker图像和容器
我有多个Docker映像和容器在VM上运行。但是像“runc list”这样的命令并没有列出其中的任何一个 如何使runc/containerd知道我现有的docker映像?运行时(runc和ctr命令不显示docker图像和容器,docker,runc,containerd,Docker,Runc,Containerd,我有多个Docker映像和容器在VM上运行。但是像“runc list”这样的命令并没有列出其中的任何一个 如何使runc/containerd知道我现有的docker映像?运行时(runc)使用所谓的运行时根目录来存储和获取有关容器的信息。在此根目录下,runc放置子目录(每个容器一个子目录),每个子目录都包含容器状态描述所在的state.json文件 运行时根目录的默认位置是/run/runc(对于非无根容器)或$XDG\u runtime\u DIR/runc(对于无根容器)-后者通常也指
runc
)使用所谓的运行时根目录来存储和获取有关容器的信息。在此根目录下,runc
放置子目录(每个容器一个子目录),每个子目录都包含容器状态描述所在的state.json
文件
运行时根目录的默认位置是/run/runc
(对于非无根容器)或$XDG\u runtime\u DIR/runc
(对于无根容器)-后者通常也指向/run
下的某个位置(例如/run/user/$UID/runc
)
当容器引擎调用runc
时,它可能会覆盖默认的运行时根目录并指定自定义目录(runc
的--root
选项)。Docker使用这种可能性,例如在我的框中,它指定/run/Docker/runtime runc/moby
作为运行时根
也就是说,要使runc list
看到Docker容器,必须通过指定--root
选项将其指向Docker的运行时根目录。此外,假定Docker容器在默认情况下不是无根的,您将需要适当的权限来访问运行时根(例如,使用sudo
)
所以,这就是工作原理:
$ docker run -d alpine sleep 1000
4acd4af5ba8da324b7a902618aeb3fd0b8fce39db5285546e1f80169f157fc69
$ sudo runc --root /run/docker/runtime-runc/moby/ list
ID PID STATUS BUNDLE CREATED OWNER
4acd4af5ba8da324b7a902618aeb3fd0b8fce39db5285546e1f80169f157fc69 18372 running /run/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/4acd4af5ba8da324b7a902618aeb3fd0b8fce39db5285546e1f80169f157fc69 2019-07-12T17:33:23.401746168Z root
至于图像,您不能让
runc
看到它们,因为它根本没有图像的概念——相反,它是在运行的。创建捆绑包(例如,基于映像)是调用方的责任(在您的案例中为-containerd)。如何找到运行时根目录?@SamThomas我不确定是否有简单的方法让Docker告诉您,因为这是一种“实现细节”。谈到非琐碎的方法——可能是strace
ingcontainerd
(正如@Niklas在中向您提出的)是最普遍的方法,因为它将揭示传递给runc
的实际参数。抱歉,但我没有更好的建议(实际上,我在写这篇文章时用了相同的方法来确定我机器上的运行时目录位置)