如何使用crictl找出容器的PID

kva*_*aps 9 containers kubernetes

Kubernetes 正在弃用 Docker 作为 CRI 引擎。现在有containerd和CRI-O,可以作为它的替代品。两者都可以通过 cri-tools 中的 crictl 进行管理。

我需要一些通用的方法来查找正在运行的容器的 PID。

实际上我需要一个相当于 docker 命令的crictl :

# docker inspect 86cd8d605c2da -f '{{ .State.Pid }}'
9625
Run Code Online (Sandbox Code Playgroud)

Pjo*_*erS 4

正如我在评论部分提到的,要使用CRI实现您需要的功能,您还可以使用inspect命令。

实现容器PID的步骤

  1. 列出要获取的容器Container ID
$ crictl ps
CONTAINER           IMAGE               CREATED             STATE               NAME                   ATTEMPT             POD ID
cdb3feac5bdd3       35c43ace92162       3 minutes ago       Running             nginx                  0                   940b5d97fb46a
0d84f965a1c8d       6266988902813       29 minutes ago      Running             prometheus-to-sd       0                   11dad991a79e4
437c1e31d5ff1       ccbe64d6d9477       29 minutes ago      Running             metadata-agent-nanny   0                   74cbad8857254
Run Code Online (Sandbox Code Playgroud)
  1. 检查特定容器
$ crictl inspect cdb3feac5bdd3
{
  "status": {
    "id": "cdb3feac5bdd3981d58fb3cd2fc08cf53bbff326a38c95a77e7ec43a80fa9713",
    "metadata": {
      "attempt": 0,
      "name": "nginx"
Run Code Online (Sandbox Code Playgroud)

在下面的部分中,您将能够找到这个容器PID

"info": {
    "sandboxID": "940b5d97fb46a3c6efdf256f751cab3f3a282150efd4cdef969692d03deb4829",
    "pid": 15701,
Run Code Online (Sandbox Code Playgroud)

上面(默认)输出是Go-Template格式(您也可以选择YAMLJSON格式)。

$ crictl inspect
NAME:
   crictl inspect - Display the status of one or more containers

OPTIONS:
   --output value, -o value  Output format, One of: json|yaml|go-template|table
Run Code Online (Sandbox Code Playgroud)

要获得您需要的内容,您只需指定path此信息即可。

$ crictl inspect --output go-template --template '{{.info.pid}}' cdb3feac5bdd3
15701
Run Code Online (Sandbox Code Playgroud)

解决方案

使用以下命令来containerID获取容器PID

$ crictl inspect --output go-template --template '{{.info.pid}}' <yourContainerID>
Run Code Online (Sandbox Code Playgroud)

  • 好吧,就我而言,我有一个错误```FATA[0000]获取容器“bac7563751e9a”的状态:无法模板数据:模板:tmplExecuteRawJSON:1:7:在&lt;.info.pid&gt;执行“tmplExecuteRawJSON” :地图没有键“info”的条目```版本:0.1.0运行时名称:docker运行时版本:19.03.14运行时Api版本:1.40.0 (2认同)