“docker run 成功了”最多说明某条客户端请求获得了响应,不保证 probe-app 能够接收真实业务请求。先把13 的镜像制品、18 的 content/task和17 的 create/start沿时间摆成一条链,再讨论不同故障落在哪一层。

一次请求的可能路径

用户端请求 daemon 创建或启动容器;daemon 对镜像引用做解析或拉取,准备快照与运行配置;下游运行时创建对应 Linux 进程并执行入口。是否通过 containerd、shim、哪一种 OCI runtime 由本机版本与配置决定,不能给出未经版本验证的唯一函数调用栈。进程 exec 成功之后,应用还可能解析参数失败、只监听 loopback 或尚未就绪。把“客户端返回”、“daemon 对象创建”、“宿主进程执行”、“HTTP /ready=200”各自作为检查点,才能说清哪个阶段失败。

正常案例要求同一次构建的 image digest 贯穿 docker inspect、runtime ID、宿主 PID、namespace inode 和请求日志,按时间排序保存不同组件的事件;失败案例把探针入口命令改为不存在路径,只改自建镜像或容器,预期镜像可拉取而 exec 失败,不能描述成下载错误。附件列出跟踪字段与清理,源码包沿用可信探针,避免把完全不同应用的日志拼成一条链。

当前云端没有 Docker/containerd,也就没有选定版本源码可核对的 daemon 调用路径。本文仅陈述规范/文档允许的分层关系,真实事件链及错误案例均 NOT_RUN;切勿把 00 中普通进程的 /identity 冒充 Docker 进程证据。

现象 从哪层开始排查 缺什么证据不能定论
pull 成功但 run 失败 config、snapshot、exec 错误 没有宿主 PID 不等于网络问题
run 返回但业务 503 进程/监听/应用 ready 缺业务请求不能判定成功
只有容器 ID 对应 task PID、镜像 digest 不能还原调用链

练习

  1. 先预测入口路径不存在时,镜像下载、容器创建、进程执行三个阶段会在哪一步出现首个可见失败;在专用 VM 保留对应返回码和原始日志。
  2. 预测 probe-app 设 --ready-delay 10 与入口立即异常退出的 /health、/ready 及进程状态差别,逐项验证不把 503 当 exec 失败。

上一篇:18:containerd 对象;下一篇:20:rootless。

系列总目录:从进程隔离到运行时与编排。

参考资料