You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取容器运行时信息?初始化阶段如何识别运行时类型?

如何判断容器运行时类型(Docker/Podman/Kubernetes等)

之前靠读取/run/systemd/container文件或容器环境变量的方法,在Docker、Podman更新后已经不太好用。下面这些方法可以在容器初始化阶段就准确识别运行时类型:

1. 读取/proc/self/cgroup文件

容器运行时会在cgroup路径里留下明显标识,直接过滤关键词就能判断:

  • Docker:结果里会带docker字符串
  • Podman:结果里会带podman字符串
  • Kubernetes(基于containerd/CRI-O):结果里会带kubepods字符串
    快速检查命令:
grep -E '(docker|podman|kubepods)' /proc/self/cgroup

2. 检查特定运行时目录

不同容器运行时会把自身的运行目录挂载到容器内,直接查看是否存在这些目录:

  • 存在/run/containerd/ → containerd管理(常见于新版Docker或K8s)
  • 存在/run/crio/ → CRI-O管理(K8s常用运行时)
  • 存在/run/podman/ → Podman管理
    检查命令:
ls -ld /run/{containerd,crio,podman} 2>/dev/null

3. 解析/proc/self/mountinfo挂载信息

这个文件记录了容器内的所有挂载来源,不同运行时的存储路径有特征:

  • Docker:挂载条目里有/var/lib/docker/路径
  • Podman:挂载条目里有/var/lib/containers/storage/路径
  • Kubernetes:挂载条目里有/var/lib/kubelet/相关路径
    过滤命令:
grep -E '(docker/containers|containers/storage|kubelet/pods)' /proc/self/mountinfo

4. 查看PID 1的父进程信息

容器初始化阶段,PID 1的父进程通常和运行时直接相关:

  • 先查PID 1的父进程ID:ps -o ppid= -p 1
  • 再查看父进程的命令行:cat /proc/<PPID>/cmdline
    • Docker对应父进程可能是docker-init
    • Podman对应父进程可能是podman-init
    • Kubernetes用containerd的话,父进程可能是containerd-shim

内容的提问来源于stack exchange,提问作者subbaraoc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:15:05