Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
runc和ctr命令不显示docker图像和容器_Docker_Runc_Containerd - Fatal编程技术网

runc和ctr命令不显示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(对于无根容器)-后者通常也指

我有多个Docker映像和容器在VM上运行。但是像“runc list”这样的命令并没有列出其中的任何一个

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

运行时(
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
ing
containerd
(正如@Niklas在中向您提出的)是最普遍的方法,因为它将揭示传递给
runc
的实际参数。抱歉,但我没有更好的建议(实际上,我在写这篇文章时用了相同的方法来确定我机器上的运行时目录位置)