对 /api/status.json 发送一次限时请求,记录 HTTP 状态与耗时。
外观
外观
约 2367 字大约 8 分钟
阶段考核故障定位证据链Docker Compose
2026-07-30
[Windows PowerShell] wsl ~:打开本机默认的 WSL2 Ubuntu;出现 用户名@主机名:~$ 后再执行标为 [WSL] 的命令。[WSL] ssh root@你的ECS公网IP:从 WSL 连接自己的 ECS;如果登录用户不是 root,请换成控制台显示的实际用户,看到远端提示符后再执行标为 [ECS] 的命令。前八次课已经练过 SSH、Linux 巡检、Nginx、备份恢复、Compose、数据库和负载均衡。本次课不再增加一套新工具,而是考查能否把已有方法连成一次完整的运维处理:
确认范围 -> 建立基线 -> 复现现象 -> 收集证据
-> 提出假设 -> 最小修复 -> 回归验证 -> 清理与报告考核环境是一套独立的 Web—API Compose 项目,项目名为 cloud-course-exam-09,入口只绑定 127.0.0.1:18009。每组会得到一种可恢复故障,不得通过询问他组答案或重建全部环境绕过定位过程。
安全边界
考核只允许操作 cloud-course-exam-09。不得停止服务器所有容器、删除未知卷、修改防火墙与安全组、开放公网端口或重置共享服务器。无法确认对象时,先停止变更并保留证据。
页面最后能打开,只说明结果恢复了;本次阶段考核还要交付 5 组可以复核的链条证据:
评分的核心关注点在于“推演证据链是否能够自洽地支持故障结论”。如果纯靠运气随机重置服务凑巧恢复,却无法清晰解释根本原因,将无法获得完整的分数。
拿到案例后,先保存基线,再接收故障现象。故障出现后不要立即重建项目,也不要翻看答案库。可以查阅前几课的命令卡,但报告中的每个判断都要指向自己取得的状态、端口、HTTP 或日志证据。
修复动作必须限制在 cloud-course-exam-09 内。若一条命令会影响其他容器、端口、网络或目录,先停下来重新确认范围。
进入 ECS 上的考核工程目录,先做静态审查:
[ECS] cd ~/cloud-course/exam-09
[ECS] docker compose config --services预期输出 api 和 web 两个服务。理解它们各自的职责分工,不要机械抄写名字。
[ECS] docker compose config --quiet静默无报错代表 Compose 语法合规;这仅代表文件可读,服务还没跑通。
启动基准测试环境:
[ECS] docker compose up -d
[ECS] docker compose ps在正常基线状态下,两项服务都应处于 healthy 状态,且仅有 web 服务将端口绑定在 127.0.0.1:18009。
校验完整的用户请求路径:
[ECS] curl -sS http://127.0.0.1:18009/api/status.json若终端正确返回包含 exam-api 与 status=ok 的 JSON 响应,将该输出留存作为故障前的基线对照。基线的作用在于为你确立“系统在无故障时应当展现的标准形态”。
云主机 B 隔离考核项目 · 2026-07-28 真实运行
root@SYG680400:/opt/xpk-course-demos/lesson-09$ docker compose config --servicesapiweb“展开服务清单”保留了完整命令和与它相邻的输出。判断时应直接引用输出中的字段或状态,不要把步骤名称当成结论。
这一步是“考核项目的服务、端口边界和故障前正常 API 响应”证据链中的一环。
只定义案例基线,不能证明故障注入后仍然正常

整页截图与上方分步卡片来自同一条记录;敏感字段已经遮盖,较长命令可能经过换行排版。
把组件状态、HTTP 和日志串成可证伪的假设,而不是凭感觉重启。
对 /api/status.json 发送一次限时请求,记录 HTTP 状态与耗时。
故障注入完成后,不要立即执行 docker compose up -d、docker restart 或重建容器。先按流程保存未经修改的原始现场。
首先检查容器整体运行态:
[ECS] docker compose ps -a带有 -a 参数能把已经异常退出的容器一并列出。记录容器名、退出码与端口映射。某个容器仍处于 Up 状态,只能说明它没有退出,业务功能是否完整还要沿用户路径验证。
紧接着,发起与用户真实访问路径一致的请求测试:
[ECS] curl --max-time 8 -sS -o /dev/null -w \
'http=%{http_code} time=%{time_total}\n' \
http://127.0.0.1:18009/api/status.jsonHTTP 状态与耗时能区分立即拒绝、网关错误和等待超时。不要连续刷新覆盖最早现象。
最后,查看最近日志:
[ECS] docker compose logs --since 2m --tail 30 web api只截取与本次请求接近的行。日志中的内部地址需要脱敏,无关历史日志不进入报告。
阶段考核案例 A · 2026-07-28 真实注入,修复命令未展示
...$ docker compose ps -aSERVICE STATUS PORTSapi Exited (0) Less than a second agoweb Up (healthy) 127.0.0.1:18009->80/tcp这条命令读取运行状态。应关注服务名称、健康状态、就绪数量和端口映射,不要只凭命令返回了表格就判断业务正常。
这一步是“API 容器停止、Web 仍健康、用户路径 504 和上游超时日志”证据链中的一环。
作为考核现象不直接给出修复命令;其他 504 仍需独立判断

整页截图与上方分步卡片来自同一条记录;敏感字段已经遮盖,较长命令可能经过换行排版。
把每条证据写进表格:
| 证据 | 已经证明 | 还不能证明 |
|---|---|---|
compose ps -a | 各容器当前生命周期状态 | 完整 HTTP 是否成功 |
| HTTP 状态与耗时 | 用户路径的实际结果 | 具体是哪项配置或进程导致 |
| Web 日志 | 请求是否进入网关、上游发生了什么 | 上游内部业务一定正确 |
| API 日志 | API 是否启动、是否处理请求 | 浏览器到 Web 的外部路径正常 |
当前假设必须能被下一条检查证伪。例如:
假设:故障位于 Web 到 API 的内部链路。
依据:Web 入口仍能接收请求,但 /api 返回网关错误。
下一条检查:查看 API 容器状态和 Web 的上游错误。
若结果不支持:转向 Web 配置或内部名称解析。不能写“Docker 坏了”“网络不行”这类无法验证的宽泛结论。
在报告中先填写:
目标对象:
准备执行的命令:
这条命令会改变什么:
为什么它比重建全部环境更小:
失败时如何停止或恢复:确认对象属于 cloud-course-exam-09 后,才执行选定修复。考核允许使用已经学过的项目级生命周期命令和配置检查;不允许用删除整个项目、删除卷或重装系统代替定位。
修复后不要立刻宣布完成。按原路径重新检查:
[ECS] docker compose ps确认需要运行的服务状态。
[ECS] curl -sS http://127.0.0.1:18009/api/status.json必须重新取得 status=ok。
[ECS] docker compose logs --since 1m --tail 20 web api确认修复后的请求产生了新的成功记录,并说明旧错误为何仍可能保留在历史日志中。
阶段考核案例 A · 2026-07-28 真实回归
...$ docker compose psSERVICE STATUS PORTSapi Up (healthy) 80/tcpweb Up (healthy) 127.0.0.1:18009->80/tcp这条命令读取运行状态。应关注服务名称、健康状态、就绪数量和端口映射,不要只凭命令返回了表格就判断业务正常。
这一步是“两项服务健康、原 API 路径恢复、自动验收关键项通过”证据链中的一环。
不能替代长时间稳定性观察,也不能补回缺失的原始故障证据

整页截图与上方分步卡片来自同一条记录;敏感字段已经遮盖,较长命令可能经过换行排版。
输入脱敏后的阶段考核证据,让助教只检查推理结构,不直接给出案例答案。
本实验的原始聊天仅保存在当前标签页,不会写入全局课程助教上下文。
运行:
[ECS] bash verify.sh自动验收检查:
status=ok。人工验收继续核对:
自动脚本验收通过,也不能弥补缺失的原始故障证据。
观看时留意:案例怎样从一个宽泛现象逐步找到能缩小范围的指标和进程证据?
与本课的关系:完成本课考核和验收后再展开,对照自己的现象、证据、假设和回归记录。
观看时留意:看到 502 后,案例先检查了什么,为什么没有直接重启 Nginx?
与本课的关系:短视频只提供一个排障样例。完成考核后,再判断它与本课故障是否属于同一层。
完整考核环境、故障注入范围和截图清单见实训 09:阶段故障诊断考核。
确认报告截图齐全后:
[ECS] docker compose down确认项目不再运行:
[ECS] docker compose ps -a空列表表示本课容器已清理。
确认端口释放:
[ECS] ss -lnt 'sport = :18009'无输出表示考核入口端口已释放。
提交文件:
班级_学号_姓名_第09次课_阶段故障考核报告.docx只上传一个 Word 到智慧职教“第09次课”。截图中不出现公网地址、账号、SSH 配置、内部地址、其他项目名或无关日志。
检查时间顺序、证据、假设、最小修复、回归、清理和脱敏。
完成后可立即查看反馈和解析。
下一次课进入 OpenStack 架构,用服务职责和实例创建流程理解私有云控制面。
以下资料在 2026-07-28 核对:
助教会读取当前课程页面和结构化学习记录,但不会读取正文实验框里的原始聊天。