题目环境镜像 · 使用说明
registry.xiaoaojianghu.fun 提供交付题目所需的环境镜像。题包里已经写好了镜像地址,登录之后,Harbor 会直接拉取预构建的镜像运行,不需要自己构建。
1. 你会收到什么
- 题包(tar.gz):每道题的
task.toml里,docker_image写的是registry.xiaoaojianghu.fun/deliver/…@sha256:…。 - 一个只读账号:用户名和密码(以
hrr_开头)。账号只能拉取交付给你的镜像。
密码只发一次,请妥善保存,不要提交到代码仓库。如果丢失或泄露,请联系我们吊销并重新发放。
2. 登录
echo '<密码>' | docker login registry.xiaoaojianghu.fun -u <用户名> --password-stdin
看到 Login Succeeded 就可以了。登录信息保存在本机的 docker 配置里(默认 ~/.docker/config.json),之后 Harbor 和 docker 都会自动使用。
3. 运行题目
登录之后,直接用 Harbor 运行交付的题包即可。Harbor 读到 docker_image 后会拉取预构建镜像,不会构建 environment/ 里的 Dockerfile(这些文件保留在题包里,仅供参考)。
需要在多台机器上运行时,每台机器都要先登录一次。也可以提前拉好镜像:
# 拉取一道题用到的所有镜像
grep -h docker_image */task.toml | sed 's/.*"\(.*\)"/\1/' | sort -u | xargs -n1 docker pull
4. 单独拉取镜像
docker pull registry.xiaoaojianghu.fun/deliver/<名称>/env@sha256:<digest>
- 镜像都是 linux/amd64。在 Apple Silicon 等 arm64 机器上需要 amd64 模拟,速度会慢很多,建议在 x86_64 机器上运行。
- 题包按 digest 引用镜像,内容不会变:同一个 digest 任何时候拉到的都是同一份环境。
- 镜像层由对象存储直接提供。拉取时会被重定向到
*.cos.ap-shanghai.myqcloud.com的临时链接;如果你的网络有出口白名单,请放行这个域名。
5. 在 CI 或服务器上使用
export REGISTRY_USER=<用户名> REGISTRY_PASSWORD=<密码> # 从密钥管理里取,不要写进脚本
echo "$REGISTRY_PASSWORD" | docker login registry.xiaoaojianghu.fun -u "$REGISTRY_USER" --password-stdin
Kubernetes 中可以用 kubectl create secret docker-registry 创建拉取凭证,并在 Pod 里设置 imagePullSecrets。
6. 常见问题
| 现象 | 原因和处理 |
|---|---|
unauthorized: authentication required或 denied |
没有登录、密码错误,或账号已过期、已吊销。请重新执行第 2 步;仍然失败请联系我们。 |
能登录,但拉某个镜像时提示 denied / unauthorized |
这个镜像不在交付给你的范围内。请确认题包是发给你的那一份,或联系我们开通。 |
manifest unknown | digest 写错了,或者题包被修改过。请使用我们发的原始题包。 |
| 拉取卡住或很慢 | 镜像层从对象存储下载,请检查到 *.cos.ap-shanghai.myqcloud.com 的网络和代理设置。 |
no matching manifest for linux/arm64 | 镜像只有 amd64 版本,请在 x86_64 机器上运行,或开启 amd64 模拟。 |
docker search / 列出仓库没有结果 | 正常现象:出于隔离,账号不能浏览仓库列表,只能按题包里的地址拉取。 |
7. 联系我们
账号问题(丢失、泄露、过期、需要更多题集的权限)请联系为你交付题目的对接人,并附上用户名和报错信息。请不要在任何地方发送密码。