记录首次搭建靶场
引言
- 目前可以个人手动搭建的本地web靶场都需要源文件中有
dockerfile文件,才可使用docker抓取 - 本博客用”第九届 “强网杯” 全国网络安全挑战赛 线上赛”初赛web赛题”SecretVaulttar”为例
校验文件完整性
下载HashMyfiles软件
将题目源码压缩包放入该软件中,获取对应长度的哈希字符,将该哈希字符与自带的校验字符比对,若一致则文件完整。无损坏
如:
文件自带哈希:

比对后发现一致,文件完整性良好
获取docker环境
准备虚拟机
- 自己在VMware中准备一台虚拟机,我就直接使用kail,并且要安装docker及其相关配置。
布置环境
我就懒得写了,具体指令参考该博客:
利用GitHub、docker部署CTF-web题目复现
我们可以跳过git拉取文件的那个步奏。因为我们已经有文件源码大概步奏可以简化为:
在题目文件夹内打开终端
1
service docker start
搭建环境(我推荐用我写的这个更稳定的来搭建)
1
DOCKER_BUILDKIT=0 docker compose build --pull --no-cache
一般命令为:
1
docker-compose build
然后启动环境
1
docker-compose up -d
最后查看靶场端口
1
docker ps
直接进入本地网页:
http://127.0.0.1:5555启动靶场
容器过期怎么办?
使用以下两条命令重启并进入即可:1
docker-compose up -d
查看端口
1
docker ps
个人遇到的一些问题汇总(chatgpt总结)
关于VPN宿主机和虚拟机的通用
- 需要在vpn插件中关闭直接连接,打开虚拟网卡连接,才可以虚拟机也获得翻墙效果。否则虚拟机无vpn连接
关于docker compose build
docker compose build 默认用 BuildKit
BuildKit 在拉 镜像元数据(config / metadata) 时:
- 之前网络不稳定 / 被拦 / 中途断过
- 本地留下 不一致的缓存记录
于是触发:
1 | failed size validation |
镜像其实是存在的,网络后来也是通的
但 BuildKit 非常严格,一旦发现不一致直接拒绝构建
为什么 docker pull 能成功,但 compose build 不行
docker pull:
👉 只管把镜像拉下来,流程简单docker compose build + BuildKit:
👉 先解析、缓存、校验 metadata
👉 校验失败 → 直接报错
两条路径,不是同一个系统。
最终怎么解决(关键一步)
1 | DOCKER_BUILDKIT=0 docker compose build --pull |
原理
- 强制使用 classic builder
- 绕开 BuildKit 的元数据缓存和严格校验
- 构建流程变直线 → 直接成功
核心总结(记住这 3 句话就够)
- BuildKit 报
size validation / failed precondition≠ 镜像不存在 - 能
docker pull,却compose build失败,优先怀疑 BuildKit - 关 BuildKit:
DOCKER_BUILDKIT=0,90% 立刻解决
排查方法
能 pull 但 build 报 size validation / precondition,99% 不是网络本身,而是 BuildKit 的“记账缓存”在作怪。
快速决策树
- pull 都失败 → 网络问题
- pull 成功,build 失败 → 关 BuildKit
一、测试 pull 能不能成功(只测拉镜像)
1️⃣ 最小网络/Registry 测试(不拉大镜像)
1 | docker pull hello-world |
判断:
- ✅ 成功 → Docker 到 registry 基本没问题
- ❌ 失败 → 网络 / 代理 / 镜像源问题
2️⃣ 测试具体基础镜像(与你 build 用的一致)
1 | docker pull python:3.13-alpine |
判断:
- ✅ 都成功 → 镜像存在 + registry 链路 OK
- ❌ 某个失败 → 镜像 tag / 网络 / 镜像源问题
(此时 不用看 build,先修 pull)
3️⃣ 只测试 Registry API 是否可达(判“是不是没网”)
1 | curl -I https://registry-1.docker.io/v2/ |
判断:
- 返回
401 Unauthorized→ ✅ 正常(这是“通了”的标志) - 超时 / refused → ❌ 网络层问题
二、测试 build 能不能成功(BuildKit 路径)
4️⃣ 默认 build(使用 BuildKit)
1 | docker compose build --pull |
判断:
- ✅ 成功 → 一切正常
- ❌ 报错:
failed size validationfailed preconditionfailed commit on ref
👉 高度怀疑 BuildKit 缓存/元数据问题
三、测试 build(classic builder,对照用)
5️⃣ 关闭 BuildKit 再 build(关键对照)
1 | DOCKER_BUILDKIT=0 docker compose build --pull --no-cache |
判断:
- ❌ 默认 build 失败
- ✅ 这条成功
➡️ 结论 100%:BuildKit 是拦路虎(不是网络、不是镜像、不是 Dockerfile)
这一步就是你这次的决定性证据。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Dedsec的博客!



