在我的理解中,我使用的是使用此版本的docker使用容器d来管理映像和容器生命周期。的20.10.21版本,但是为什么我不能使用板球/nerdctl来列出由docker启动的容器呢?
我试过的是:
已加载的docker.service -码头应用程序容器引擎: loaded (/usr/lib/systemd/system/docker.service;禁用;预置:禁用)插入: /etc/systemd/system/docker.service.d└─http-proxy.conf Active: active (运行),自Sun 2022-12-04 22:44:27 CST;TriggeredBy: docker.socket文档:https://docs.docker.com主PID: 1821 (停靠)任务: 91 (限制: 38297)内存:2296mcpu: 1.214s CGroup: /system.slice/docker.service├─1821 /usr/bin/dockerd -H fd://├─1845 https://docs.docker.com/-config/var/run/docker/dockerd/cuerd.toml-log级别信息
我猜这意味着容器是由docker守护进程启动的。而unix套接字位于/var/run/docker/收集器/cuerd.sock。
$ nerdctl --地址是unix:///var/run/docker/containerd/containerd.sock ps FATA0000无根容器没有运行?(提示:使用
containerd-rootless-setuptool.sh install
启动无根容器):stat /run/user/1000/containerd rootless :没有这样的文件或目录
然后我又用sudo试了一次
地址unix:///var/run/docker/containerd/containerd.sock ps容器ID映像命令创建状态端口名
如您所见,没有列出任何容器,但是docker显示了我启动的许多容器。
-r unix:///var/run/docker/containerd/containerd.sock ps E1204 22:47:27.190569 3925 remote_runtime.go:557]“err="rpc错误:代码=未实现的desc =未知服务runtime.v1#en1#2. runtime”filter="&ContainerFilter{Id:,State:&ContainerStateValue{State:CONTAINER_RUNNING,},PodSandboxId:,LabelSelector:mapstringstring{},}“FATA0000列表容器: rpc错误: code =未实现的desc =未知服务runtime.v1alpha 2.RuntimeService
因此,我的问题是:为什么我不能得到同样的结果码头的cli的书呆子/板球?我做错什么了吗?或者我的理解有什么不对?
谢谢你的建议。
发布于 2022-12-04 14:40:30
是的,nerdctl和crictl可以用来列出由Docker启动的容器。实际上,nerdctl和crictl是命令行工具,它们提供了一个容器的接口,这是Docker中负责管理容器生命周期的组件。因此,如果Docker正在使用containerd来管理其容器,那么您应该能够使用nerdctl或crictl列出这些容器。
要使用nerdctl或crictl,您需要指定容器套接字的地址,您可以通过运行systemctl status docker
命令并查找containerd.sock
文件找到这个地址。然后,在运行nerdctl或crictl命令时,可以使用--address
标志指定套接字。例如,要使用nerdctl列出所有容器,可以运行以下命令:
nerdctl --address unix:///var/run/docker/containerd/containerd.sock ps
如果在运行此命令时仍无法看到任何容器,则可能会出现连接容器套接字的问题。您可以尝试在运行nerdctl或crictl命令时使用--debug
标志来查看更详细的输出并诊断问题。
更新:
听起来,当使用nerdctl和crictl列出由docker管理的容器时,您似乎遇到了一些错误。这可能有几个潜在的原因。
首先,需要注意的是,默认情况下,docker使用它自己的内部容器运行时来管理容器,并且它不会直接向用户公开基础容器运行时。因此,您可能无法使用nerdctl和crictl这样的工具直接与docker管理的容器进行交互。
此外,您正在使用的nerdctl和crictl的版本可能与docker正在使用的容器d版本不兼容。由于容器是一种不断发展的技术,不同版本的容器公开的API和功能可能会有所不同,因此您可能需要使用nerdctl和crictl的版本,这些版本是专门设计来与docker正在使用的容器的版本一起工作的。
最后,值得注意的是,在某些情况下,在运行nerdctl和crictl时,您可能需要使用--rootless
标志来与无根码头安装进行交互。此标志告诉工具使用容器的无根版本,这是由无根模式的停靠者使用的。
总之,您不能使用nerdctl和crictl列出由docker管理的容器可能有几个潜在的原因。尝试使用这些工具的不同版本,并使用--rootless
标志,看看这是否有助于解决您遇到的问题,这可能是值得的。
https://stackoverflow.com/questions/74677606
复制相似问题