外观
实训 06:Compose 多服务依赖与故障闭环
约 778 字大约 3 分钟
云计算实训第06次课
2026-07-30
所有操作限定在 ~/cloud-course/lab-06,项目名为 cloud-course-lab-06。
一、目标和证据
- 读懂 Web、API、内部网络和回环端口;
- 启动双服务项目并从浏览器访问;
- 停止 API,比较容器状态与业务状态;
- 根据 HTTP 和 Web 日志恢复服务;
- 运行验收并清理本项目。
二、安全边界
- 不运行针对所有容器的批量停止或删除命令。
- 不修改现有业务端口,不将 18006 改为公网绑定。
- 只停止
cloud-course-lab-06中的api。 .env不保存账号或密码,也不上传。
三、任务 1:准备并检查配置
把 starter 完整复制到 ECS 的实验目录:
[ECS] mkdir -p ~/cloud-course/lab-06
[ECS] cd ~/cloud-course/lab-06
[ECS] cp .env.example .env
[ECS] chmod 600 .env检查:
[ECS] docker compose config --services
[ECS] docker compose config --images
[ECS] docker compose config --quiet截图 1:服务名、镜像和配置检查。
记录:哪项检查只读配置,哪项还需要运行后验证。
四、任务 2:启动前预检
[ECS] free -h
[ECS] docker compose ls
[ECS] ss -lnt 'sport = :18006'确认可用内存、现有项目和端口。18006 被占用时停止操作,保留证据并请教师分配其他课程端口。
五、任务 3:启动并检查内部链路
[ECS] docker compose up -d
[ECS] docker compose ps
[ECS] docker compose exec web getent hosts api
[ECS] docker compose exec web wget -qO- http://api/status.json
[ECS] curl -sS http://127.0.0.1:18006/api/status.json截图 2:容器与端口。
截图 3:服务名解析、内部 HTTP 与宿主机 HTTP。
检查点:
- API 没有宿主机端口映射;
- Web 只绑定
127.0.0.1:18006; - 两种 HTTP 请求都返回
status=ok。
六、任务 4:浏览器访问
在 WSL 保持隧道:
[WSL] ssh -N -L 18006:127.0.0.1:18006 你的ECS登录目标Windows 浏览器打开 http://127.0.0.1:18006/。
截图 4:页面显示“API 状态:ok”。
说明:为什么这比只看两个容器 Up 多验证了一层。
七、任务 5:停止 API 并恢复
保存正常响应:
[ECS] curl -sS http://127.0.0.1:18006/api/status.json只停止 API:
[ECS] docker compose stop api观察:
[ECS] docker compose ps
[ECS] curl --max-time 8 -sS -o /dev/null -w 'http=%{http_code}\n' \
http://127.0.0.1:18006/api/status.json
[ECS] docker compose logs --since 30s --tail 8 web恢复:
[ECS] docker compose start api
[ECS] docker compose ps
[ECS] curl -sS http://127.0.0.1:18006/api/status.json截图 5:API 停止、Web 仍运行、请求失败和日志。
截图 6:API 恢复及 JSON 回归。
故障工单:
原始正常证据:
停止对象:
Web 容器状态:
业务 HTTP 状态:
关键日志:
故障层:
恢复操作:
回归结果:八、任务 6:验收和清理
[ECS] bash verify.sh
[ECS] docker compose down
[ECS] ss -lnt 'sport = :18006'verify.sh 在服务运行时检查完整链路。清理后再次检查端口,空输出表示课程入口已经释放。
最终上传:
班级_学号_姓名_第06次课_DockerCompose多服务报告.docx只交 Word,并确认智慧职教显示提交成功。
