ret2shell靶场运维学习:把本地或云端docker镜像上传到平台
Ret2Shell 使用本地/超长 Docker 镜像
前提是要把镜像搜索功能关闭,可以看前一篇帖子:https://www.cnblogs.com/ljnljn/p/20082947
目标
让 Ret2Shell 平台启动题目环境时使用你本地构建的镜像,而不是去公网 Docker Hub 拉取。
关键概念
平台创建的是 Kubernetes Pod。Kubernetes 节点默认看不到你本机 Docker 里的镜像。
所以不要只在本机保留:
1 | phpserialize-labs:latest |
而是要把镜像推送到平台内置 registry,再让平台使用完整镜像地址。
当前平台 registry 地址:
1 | localhost:30310 |
镜像地址示例:
1 | localhost:30310/phpserialize-labs:v1 |
推荐做法:不用 latest
每次构建后使用固定版本 tag,不复用 latest。
例如:
1 | docker tag phpserialize-labs:latest localhost:30310/phpserialize-labs:v1 |
如果后续镜像有更新,换一个新 tag:
1 | docker tag phpserialize-labs:latest localhost:30310/phpserialize-labs:v2 |
平台里怎么填
容器名称字段只填 Kubernetes 容器名,不能填镜像地址。
正确示例:
1 | 容器名称:phpserialize-labs |
这里注意公网镜像直接写到镜像标签即可
容器名称规则:
1 | 3-40 位 |
所以这些是错误的容器名称:
1 | localhost:30310/phpserialize-labs:v1 |
如果使用比赛 bucket(目前用不上)
有些场景会按比赛 bucket 隔离镜像,可以把镜像推到 bucket 路径下:
1 | docker tag phpserialize-labs:latest localhost:30310/<bucket>/phpserialize-labs:v1 |
平台里填:
1 | localhost:30310/<bucket>/phpserialize-labs:v1 |
常见问题
保存失败: undefined
通常是题目处于公开状态,Ret2Shell 不允许公开题目时修改环境配置。
处理:
- 先把题目 Down / 隐藏 / 下线
- 修改并保存环境配置
- 再把题目 Up / 公开
平台仍然去公网拉取
通常原因:
- 镜像字段没有填写完整 registry 地址
- 把镜像地址误填到了“容器名称”字段
- 使用了
phpserialize-labs:v1,Kubernetes 会解析成 Docker Hub 镜像 - Kubernetes 节点访问不到
localhost:30310
应填写:
1 | localhost:30310/phpserialize-labs:v1 |
docker push 报 HTTPS 或 insecure registry 错误
需要让 Docker daemon 允许不安全 registry:
1 | { |
修改后重启 Docker。
localhost:30310 到底是什么
它是平台内置 registry 暴露出来的地址。
流程是:
1 | 本地 Docker 镜像 |
如果 Kubernetes 节点和你执行 docker push 的机器不是同一台,localhost:30310 可能不适合给节点拉取,需要改成节点可访问的 IP 或域名。
- 标题: ret2shell靶场运维学习:把本地或云端docker镜像上传到平台
- 作者: ljnljn
- 创建于 : 2026-05-19 16:34:00
- 更新于 : 2026-05-25 22:04:46
- 链接: https://ljnljn2005.github.io/2026/05/19/ret2shell靶场运维学习:把本地或云端docker镜像上传到平台/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。