题目环境镜像 · 使用说明

registry.xiaoaojianghu.fun 提供交付题目所需的环境镜像。题包里已经写好了镜像地址,登录之后,Harbor 会直接拉取预构建的镜像运行,不需要自己构建。

1. 你会收到什么

密码只发一次,请妥善保存,不要提交到代码仓库。如果丢失或泄露,请联系我们吊销并重新发放。

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>

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 unknowndigest 写错了,或者题包被修改过。请使用我们发的原始题包。
拉取卡住或很慢镜像层从对象存储下载,请检查到 *.cos.ap-shanghai.myqcloud.com 的网络和代理设置。
no matching manifest for linux/arm64镜像只有 amd64 版本,请在 x86_64 机器上运行,或开启 amd64 模拟。
docker search / 列出仓库没有结果正常现象:出于隔离,账号不能浏览仓库列表,只能按题包里的地址拉取。

7. 联系我们

账号问题(丢失、泄露、过期、需要更多题集的权限)请联系为你交付题目的对接人,并附上用户名和报错信息。请不要在任何地方发送密码。