如何获取Kubernetes Pod内所有运行容器的containerID列表
Kubernetes长期运行容器containerID获取方案
错误原因说明
你之前执行的命令存在两个核心错误:
- containerID字段不属于Pod的
spec.containers路径,实际存储在status.containerStatuses路径下 - 字段名称为驼峰格式
containerID,不是全小写的containerid
可用命令参考
基础版:获取所有命名空间下所有运行中容器的containerID
输出默认带容器运行时前缀(如docker:///containerd://):
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.status.containerStatuses[*].containerID}{"\n"}{end}'
适配docker commit版:自动去除运行时前缀
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.status.containerStatuses[*].containerID}{"\n"}{end}' | sed 's#.*://##'
过滤长期运行容器版(需提前安装jq工具)
以下示例筛选已处于Running状态、启动时长超过24小时的容器ID,可自行调整命令中的86400(单位:秒)修改时间阈值:
kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(.status.phase == "Running") | .status.containerStatuses[] | select(.startedAt | fromdateiso8601 < (now - 86400)) | .containerID | ltrimstr("docker://")'
注意事项
- 仅需获取指定命名空间的容器时,将命令中的
--all-namespaces替换为-n <目标命名空间名称>即可 docker commit仅会提交容器可写层的变更,不会保存临时文件系统(tmpfs)、外部挂载Volume中的数据,测试前需确认所需变更都存储在容器可写层内- 生产环境避免直接对业务容器执行commit操作,防止IO波动影响业务稳定性
内容的提问来源于stack exchange,提问作者aedifex
相关产品推荐
相关产品推荐

