runc和ctr命令不显示docker映像和容器

时间:2019-07-12 15:24:54

标签: docker runc containerd

我在VM上运行了多个Docker映像和容器。但是诸如“ runc list”之类的命令不会列出其中任何一个。

如何使runc / containerd知道我现有的docker映像?

1 个答案:

答案 0 :(得分:1)

运行时(runc)使用所谓的运行时根目录来存储和获取有关容器的信息。在该根目录下,runc放置子目录(每个容器一个),每个子目录包含state.json文件,容器状态描述位于该文件中。

运行时根目录的默认位置是/run/runc(对于非无根容器)或$XDG_RUNTIME_DIR/runc(对于无根容器)-后者通常也指向/run下的某个位置(例如/run/user/$UID/runc)。

当容器引擎调用runc时,它可能会覆盖默认的运行时根目录并指定自定义目录(--root的{​​{1}}选项)。 Docker使用这种可能性,例如在我的盒子上,它指定runc作为运行时根。

也就是说,要使/run/docker/runtime-runc/moby能够看到Docker容器,您必须通过指定runc list选项将其指向Docker的运行时根目录。另外,鉴于Docker容器默认情况下不是无根的,因此您将需要适当的特权来访问运行时根(例如,使用--root)。

所以,这应该是这样的:

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 ,因为它根本没有图像的概念,而是在bundles上运行。创建捆绑包(例如,基于图片)是调用方的责任(在您的情况下-已打包)。