标准答案
- 先看容器事件、退出码和启动日志,确认失败发生在创建、exec 入口还是应用启动之后。
- 检查镜像架构、入口文件、执行位、解释器、工作目录、环境变量、挂载路径和用户身份。
- 应用启动后再检查端口监听、依赖连接、证书、数据库迁移和健康检查,不要把所有错误都归因于镜像。
- 修复后用同一镜像 digest、同一配置和同一运行身份复现验证,避免只在交互 shell 中手工成功。
题目解析
启动链路至少包含镜像拉取和解包、容器创建、入口 exec、配置与挂载、应用初始化、端口监听和健康检查。容器状态为 created、exited、running 或 restarting 只能定位到粗粒度阶段,events、退出码、日志和运行时 inspect 需要组合使用。
镜像内 shell 交互测试可能使用不同用户、环境、工作目录和网络,不能替代真实启动。应使用相同 digest、配置、挂载和身份重现,并把镜像架构、shebang、动态库、证书、迁移和依赖连接分别验证。
常见误区
- 误区:只执行 docker logs 不看 events。改正:同时看拉取、挂载、exec、退出码、重启和健康事件。
- 误区:用 root 进入容器测试后认为正式运行没问题。改正:用真实 UID、环境、挂载和网络配置复现启动路径。