如何获取容器运行时信息?初始化阶段如何识别运行时类型?
如何判断容器运行时类型(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
- Docker对应父进程可能是
内容的提问来源于stack exchange,提问作者subbaraoc
相关产品推荐
相关产品推荐

