Skopeo可实现免Docker Daemon的跨仓库直传,解决网络隔离与镜像可信流转问题:在跳板机用skopeo copy命令将外网镜像同步至内网私有库,全程不落地、不解压、不启动容器。

同步外网公共镜像到内网私有库,核心是解决“网络隔离”与“镜像可信流转”两个问题。不能直接在内网机器上 docker pull,也不能让私有库暴露在公网。实际可行的方案不是靠单一命令,而是分角色、分环境、分阶段完成迁移。
用 Skopeo 实现免 Docker Daemon 的跨仓库直传
Skopeo 是国内离线/半离线场景下最被低估但最稳的工具。它不依赖本地 Docker 引擎,可直接从 Docker Hub、Quay、GCR 等源仓库拉取镜像元数据和层,并推送到内网 Harbor 或 Nexus 私有库,全程不落地、不解压、不启动容器。
- 先在能连外网的跳板机安装 Skopeo(支持 RHEL/CentOS/Ubuntu,推荐用官方 repo 安装)
- 登录目标私有库:
skopeo login --username admin --password xxx https://192.168.10.50:8443 - 单条命令完成同步:
skopeo copy docker://nginx:1.28.0 docker://192.168.10.50:8443/library/nginx:1.28.0 - 批量同步可用 shell 循环或配合 YAML 清单脚本,避免手动逐条敲
传统方式:pull → tag → push(适合小批量或调试)
当 Skopeo 不可用或需验证镜像内容时,仍可沿用经典三步法,但务必在“能上网的中转机”上操作,而非内网节点。
-
docker pull redis:7.2-alpine—— 拉取原始镜像 -
docker tag redis:7.2-alpine 192.168.10.50:8443/thirdparty/redis:7.2-alpine—— 注意私有库地址、项目名(如 thirdparty)需已创建 -
docker push 192.168.10.50:8443/thirdparty/redis:7.2-alpine—— 推送前确保已docker login认证
离线导出导入(无网络通道,仅靠介质传递)
适用于完全断网、审计极严的环境,比如金融核心区或涉密系统。
- 在外网机执行:
docker save -o redis-7.2.tar redis:7.2-alpine - 将
.tar文件拷贝至内网机(U盘、光盘、内网FTP等) - 在内网机执行:
docker load -i redis-7.2.tar - 再打标并推送到内网私有库:
docker tag redis:7.2-alpine 192.168.10.50:8443/base/redis:7.2-alpine && docker push ...
用 Nexus 搭建代理仓库(长期稳定方案)
如果内网团队频繁需要不同版本的公共镜像,建议在香港或海外云主机部署 Nexus 3(开启 Docker Proxy Repository),让内网 Docker daemon 配置 registry-mirrors 指向它。这样:
- 内网所有节点只需改一个配置,就能透明访问 Docker Hub
- Nexus 自动缓存首次拉取的镜像,后续请求走本地加速
- 支持设置白名单、清理策略、审计日志,满足合规要求
- 注意:Nexus 3.30+ 才完整支持多架构(amd64/arm64)manifest


















