logo
0
0
WeChat Login

🕵️‍♂️ Project Moby: The Silent Protocol

代号 Moby:静默协议

警告:系统核心已离线。全区进入紧急维护状态。 身份确认:DevOps 特勤组 - [学员姓名] 当前状态:等待指令...


📜 任务背景 (Mission Briefing)

我们的主控 AI "Moby" 遭遇不明故障,所有的服务容器(Containers)都已陷入瘫痪、死锁或损坏状态。整个开发环境目前处于静默隔离模式。

你被紧急唤醒。作为唯一的系统维护员,你需要通过终端(Terminal),逐一修复这些"坏掉"的舱室。

你的目标很简单:利用 Docker 技能,找到每一个关卡中隐藏的 Flag。

🎮 玩法规则

  1. Flag 格式:通常为 FLAG{...} 形式的字符串。
  2. 关卡解锁:每一关的 Flag,通常是 下一关镜像的 Tag
    • 例如:如果你在 Level 1 找到了 FLAG{secret},那么 Level 2 的拉取命令就是 docker pull [你的DockerID]/project-moby:level2-secret

🚩 关卡索引

Level 1: 沉默的黑匣子 (The Silent Black Box)

📍 场景描述: 控制台显示"生命维持系统"启动失败。当我们尝试启动这个容器时,它闪烁了一下就立刻熄灭了,屏幕上一片漆黑。

我们需要读取这个"黑匣子"在死前留下的最后信息。据信,通往下一层的密钥就藏在系统的标准输出 (Standard Output) 中。

🎯 任务目标

  1. 运行 Level 1 镜像。
  2. 找出容器启动失败前的日志信息。
  3. 获取 Level 2 的 Tag。

💻 操作指令

首先,尝试启动目标容器:

docker run docker.cnb.cool/opencamp/learning-docker/project-moby:level1

(你会发现什么都没发生,容器似乎直接退出了... 这正是问题所在。)

🕵️‍♂️ 提示 (Hints):

容器虽然停止运行了(Exited),但它并不是"消失"了。它只是变成了一具"尸体"。

Docker 会忠实地记录下容器生前说过的每一句话。

你需要用到 docker logs 命令。如果你不知道怎么用,试着查询 docker logs --help。

📝 提交校验: 当你找到类似 FLAG{...} 的字符串后,请将其作为 Tag 拼接到镜像名后,尝试拉取

"提示:如果日志也被'抹除'了,说明里面混入了某种能够欺骗终端的控制信号。尝试使用管道符 (|) 配合 grep 命令来提取关键信息,或者将日志导出到文件分析。"


🔓 Level 2: 被封锁的气闸 (The Sealed Airlock)

前置需求:你必须拥有 Level 1 的 Flag 才能解锁此关卡。 当前状态:气闸控制台已上线,但物理连接被切断。

📍 场景描述: 我们成功从 Level 1 的黑匣子中恢复了系统访问权。现在,你需要进入 "气闸控制模块" 手动开启通道。

控制台运行在一个 Web 服务器上。但是,当你尝试连接时,你会发现它拒绝了所有的外部请求。防火墙图纸(Dockerfile)上标注端口是 80,但这可能是一个诱饵。

🎯 任务目标

  1. 启动 Level 2 容器。
  2. 找到 Web 服务真正监听的内部端口
  3. 利用 端口映射 (Port Mapping) 将其暴露到你的宿主机(比如 localhost:8000)。
  4. 用浏览器访问网页,获取下一关的 Flag。

💻 操作指令

首先,拉取并启动镜像:

docker run -d docker.cnb.cool/opencamp/learning-docker/project-moby:level2-[level1找到的Flag]

(注意:这次我们使用了 -d 让它在后台运行,因为这是一个 Web 服务)


👻 Level 3: 核心舱的幽灵 (The Ghost in the Shell)

前置需求:你必须拥有 Level 2 的 Flag。 当前状态:核心舱物理连接已恢复,但管理界面丢失。

📍 场景描述: 你成功启动了核心舱(Level 3),但所有的控制端口都被系统安全协议锁死了。你无法通过 Web 或日志获取任何有效信息。

扫描显示,密钥被物理写入了容器内部的一个硬盘扇区中。但我忘记了。

🎯 任务目标

  1. 启动 Level 3 容器(让它在后台运行)。
  2. 进入目标目录,找到隐藏的密钥文件。

💻 操作指令

启动目标容器:

docker run -d docker.cnb.cool/opencamp/learning-docker/project-moby:level3-[level2找到的Flag]

🔋 Level 4: 遗失的密钥 (The Missing Key)

前置需求:你必须拥有 Level 3 的 Flag。 当前状态:动力反应堆处于离线状态,启动程序报错。

📍 场景描述: 核心舱已修复,但整个空间站的能源系统(Reactor)依然没有响应。 启动日志显示,反应堆控制程序因为缺少"授权密钥"而拒绝启动。这是为了防止未授权操作而设计的安全机制。

我们需要你手动注入这个密钥,强制启动反应堆。

🎯 任务目标

  1. 启动 Level 4 容器(让它在后台运行)。
  2. 找到并注入密钥文件。

💻 操作指令

第一步:试错 运行容器,看看它报什么错:

docker run -d docker.cnb.cool/opencamp/learning-docker/project-moby:level4-[level3找到的Flag]

🕵️‍♂️ 知识点: 在 Docker 中,环境变量是配置应用程序最常用的方式(例如配置数据库密码 MYSQL_ROOT_PASSWORD)。如果忘记传递这些变量,容器通常会直接退出。


📦 Level 5: 断裂的数据链路 (The Broken Data Link)

前置需求:你必须拥有 Level 4 的 Flag。 当前状态:量子解码器已就绪,但配置文件丢失。

📍 场景描述: 反应堆已经重新上线,但我们发现量子解码器(Quantum Decoder)无法启动。系统日志显示,解码器需要读取一个配置文件,但容器内部根本不存在这个文件!

配置文件实际上存储在宿主机上。我们需要建立一个"数据桥梁",让容器能够访问宿主机上的文件。

🎯 任务目标

  1. 运行容器,分析错误信息,找出需要的配置文件路径和密钥。
  2. 在宿主机上创建配置文件,写入正确的密钥。
  3. 使用 数据卷挂载 (Volume Mount) 将宿主机目录映射到容器内部。
  4. 成功启动解码器,获取下一关的 Flag。

💻 操作指令

第一步:试错 先直接运行容器,观察错误信息:

docker run docker.cnb.cool/opencamp/learning-docker/project-moby:level5-[level4找到的Flag]

(仔细阅读错误提示,它会告诉你需要什么)

🕵️‍♂️ 提示

  • 错误信息会告诉你配置文件应该放在容器的哪个路径
  • 错误信息还会提示你配置文件中需要写入什么内容
  • 使用 -v [宿主机路径]:[容器路径] 可以将宿主机的目录"映射"到容器内部
  • 数据卷是 Docker 中实现数据持久化数据共享的核心机制

🌐 Level 6: 孤岛求援 (The Isolated Islands)

前置需求:你必须拥有 Level 5 的 Flag。 当前状态:通讯系统分裂为两个孤立节点,无法互联。

📍 场景描述: 空间站的通讯系统由两个模块组成:

  • Vault(金库):存储着最终密钥的安全服务器
  • Client(客户端):用于请求密钥的终端程序

问题是:这两个模块被隔离在不同的"网络孤岛"上,彼此无法通信。Client 尝试连接 Vault,但连接失败了。

你需要想办法让这两个容器能够互相通信。

🎯 任务目标

  1. 分析 Client 的错误信息,理解问题所在。
  2. 找到让两个容器互相通信的方法。
  3. 正确启动 Vault 和 Client,获取最终 Flag。

💻 操作指令

第一步:试错 先直接运行 Client,观察错误信息:

docker run docker.cnb.cool/opencamp/learning-docker/project-moby:level6-[level5找到的Flag]

(错误信息会给你重要的线索)

第二步:拉取 Vault 镜像

docker pull docker.cnb.cool/opencamp/learning-docker/project-moby:level6-vault

(注意:Vault 镜像的 tag 是固定的 level6-vault,不需要 Flag)

🕵️‍♂️ 提示

  • 默认情况下,容器使用 bridge 网络,彼此之间无法通过容器名称互相访问
  • 查阅 docker network --help 了解如何创建和管理网络
  • 容器可以通过 --network 参数加入指定网络
  • 容器可以通过 --name 参数指定名称
  • 在同一个自定义网络中,容器可以通过名称互相发现

🏆 Level 7: 终极试炼 - 臃肿的核心 (The Bloated Core) [BOSS]

前置需求:你必须拥有 Level 6 的 Flag。 当前状态:核心系统镜像严重膨胀,无法正常部署。

📍 场景描述: 恭喜你,特工!你已经成功修复了空间站的所有子系统。现在,只剩下最后一步:重启核心系统

但是,我们遇到了一个严重的问题:核心系统的 Docker 镜像体积超过了 1GB!这个臃肿的镜像是由一个粗心的前任工程师留下的"技术债务"。

你的最终任务是:优化 Dockerfile,将镜像体积压缩到 50MB 以下

🎯 任务目标

  1. 拉取并分析臃肿的核心镜像。
  2. 运行镜像,阅读系统给出的优化提示。
  3. 创建一个优化后的 Dockerfile
  4. 构建优化后的镜像,确保体积小于 50MB。
  5. 运行优化后的镜像,获取最终 Flag。

💻 操作指令

第一步:拉取臃肿镜像并查看大小

docker pull docker.cnb.cool/opencamp/learning-docker/project-moby:level7-[level6找到的Flag] docker images | grep level7

第二步:运行镜像,查看提示

docker run docker.cnb.cool/opencamp/learning-docker/project-moby:level7-[level6找到的Flag]

(系统会告诉你优化的方向和技巧)

第三步:获取源代码 你需要从镜像中提取 core_system.c 源代码文件,然后自己编写优化的 Dockerfile。

🕵️‍♂️ 提示

  • 可以使用 docker cp 从容器中复制文件
  • 或者使用 docker exec 进入容器查看文件内容
  • 多阶段构建 (Multi-stage Build):在一个 Dockerfile 中使用多个 FROM,将构建环境和运行环境分离
  • Alpine 镜像:超轻量级 Linux 发行版,仅 ~5MB,适合作为生产镜像的基础
  • 静态编译:使用 gcc -static 生成不依赖动态库的独立可执行文件

第四步:验证并获取 Flag 构建你的优化镜像,确认大小小于 50MB,然后运行它。系统会验证镜像大小并给出 Flag。


📤 Level 8: 提交成果 (Submit Your Work)

前置需求:你必须拥有 Level 7 的 Flag。 当前状态:完成 Level 7,提交你的优化成果。

📍 场景描述: 恭喜你完成了核心系统的优化!现在,你需要将你的 Dockerfile 提交给中央指挥部进行审核。

🎯 任务目标

  1. Fork 本仓库。
  2. 创建提交目录并复制你的 Dockerfile。
  3. 创建 completion.json 记录完成情况。
  4. 本地验证你的提交。
  5. 提交 PR,获得通关证书!

💻 操作指令

第一步:创建提交目录

mkdir -p submissions/YOUR_USERNAME/level7

第二步:复制你的 Dockerfile

cp level7/Dockerfile submissions/YOUR_USERNAME/level7/

第三步:创建 completion.json 参考 submissions/.template/ 目录下的模板,创建你的完成记录。

第四步:本地验证

./level8/validate.sh YOUR_USERNAME

第五步:提交 PR 将你的修改提交并创建 Pull Request,审核通过后即可获得通关证书!


🏁 Level 9: 猎旗行动 (The Final Hunt) [FINAL]

前置需求:完成 Level 8 的提交。 当前状态:终极挑战,猎取最后的 Flag!

📍 场景描述: 这是最后的考验!你需要在一个神秘的容器中寻找散落各处的 Flag 片段,并将它们组合成完整的 Flag。

🎯 任务目标

  1. 拉取 Level 9 镜像。
  2. 启动容器并查看挑战提示。
  3. 使用各种 Docker 命令寻找 Flag 片段。
  4. 组合所有片段,得到完整 Flag。

💻 操作指令

第一步:拉取 Level 9 镜像

docker pull docker.cnb.cool/2026jingyu/project-moby:level9

第二步:启动容器

docker run -d --name level9 docker.cnb.cool/2026jingyu/project-moby:level9

第三步:查看挑战提示

docker logs level9

第四步:寻找 Flag 片段 尝试以下命令来寻找片段:

# 检查环境变量 docker exec level9 env | grep FLAG # 查找隐藏文件 docker exec level9 find /tmp -name ".fragment*" # 检查容器文件系统变化 docker diff level9 # 进入容器探索 docker exec -it level9 sh

第五步:组合片段 将找到的所有片段按正确顺序组合,得到完整的 Flag。

🕵️‍♂️ 提示

  • 环境变量中可能隐藏着关键信息
  • 临时目录 (/tmp) 经常存放临时文件
  • docker diff 可以查看容器启动后文件系统的变化
  • 不要忘记检查常见配置文件目录
  • 片段可能需要特定的顺序组合

🎊 任务完成!

恭喜你,特工!你已经成功完成了所有 9 个关卡的挑战!

通过这次任务,你掌握了以下 Docker 核心技能:

|| 关卡 | 技能点 | ||------|--------| || Level 1 | docker logs - 日志分析与调试 | || Level 2 | docker run -p - 端口映射与网络暴露 | || Level 3 | docker exec - 进入容器内部执行命令 | || Level 4 | docker run -e - 环境变量注入 | || Level 5 | docker run -v - 数据卷挂载与持久化 | || Level 6 | docker network - 容器网络与服务发现 | || Level 7 | Multi-stage Build - 镜像优化与最佳实践 | || Level 8 | Git & PR - 项目协作与提交 | || Level 9 | 综合运用 - Docker 命令综合实战 |

"The whale has awakened. Welcome aboard, Agent." "巨鲸已苏醒。欢迎登船,特工。"


📚 延伸阅读

About

No description, topics, or website provided.
Language
Dockerfile100%