使用harbor 镜像docker方法
背景
因为现在太多镜像源不稳定,而且随时就不能用了,为了加速和方便使用,想用harbor自己搭一个代理,也可以用来上传自己的镜像自己用,
搭建过程很简单,不做赘述,这里主要讨论一个hrabor我想不改变tag的名字的情况下。方便我快速的去拉取,并且不需要更改dockerfile。
一般情况下,我们要使用自己的build的镜像,然后打tag 然后再上传到harbor,但是这样必须要加上harbor的ip地址或者域名,这样的话pull的时候就必须加IP地址,这样就需要更改dockerfile。现在用两种办法解决。
你想在 Docker 客户端写死一个“别名”,比如平时 docker pull myimage:latest 就能自动去 Harbor,不用每次写 harbor.xxx.com/myproject/myimage:latest。
不幸的是,Docker 的设计里镜像名的第一段就是 registry 域名。
如果你不写,Docker 默认就去官方的 docker.io/library 拉取。
/etc/docker/daemon.json 里的 insecure-registries 只是告诉 Docker“这些 registry 可以 http”,并不能帮你做域名替换。
所以有三种可行方案:
✅ 方案1:在本地搭一个“registry mirror”
在 daemon.json 里可以设置:
{
"registry-mirrors": ["https://harbor.example.com"]
}
这样当你 docker pull library/nginx:latest 时,Docker 会先去你设置的 mirror 看有没有。如果 Harbor 配置成 mirror(它镜像了 Docker Hub),这个就行。
缺点:Harbor 必须配置为 proxy cache(Harbor 支持这种模式)。
✅ 方案2:改 DNS / hosts
在 /etc/hosts 里把 docker.io 指向你的 Harbor IP,比如:
1.2.3.4 registry-1.docker.io
1.2.3.4 auth.docker.io
这就是“欺骗” Docker 以为 docker.io 是你的 Harbor。但这样有风险:
- Harbor 必须支持 Docker Hub API 的路径(否则 docker client 拉不到)
- 会影响你正常从 Docker Hub 拉镜像
不推荐。
✅ 方案3:Harbor 自建项目名 = 你想用的名字
在 Harbor 上把项目/镜像名做成和你习惯的一样:
比如 Harbor 地址 harbor.example.com/library/nginx:latest,你可以在本地打 tag:
docker tag nginx:latest harbor.example.com/library/nginx:latest
docker push harbor.example.com/library/nginx:latest
之后你还是得 docker pull harbor.example.com/library/nginx:latest,但至少路径一致。
🔧 总结
daemon.json只能控制安全/镜像站/加速,不能改名字映射- 真要省略域名,就只能做 Harbor Proxy Cache 模式,或者在
/etc/hosts强行替换 docker.io 域名 - 最标准可靠的方法:在镜像名里写 registry 域名
所以综上其实只有两种办法解决,第一是harbor 做镜像,第二就是改hosts。如果你是自己编译的images,改hosts是一个比较好的选择
以下截图是harbor 做dockrhub镜像,没有去弄代理,没有完成只是步骤,我准备使用第二种方法去改hosts文件

好的 👍,Harbor 从 2.0 开始就内置了 Proxy Cache(代理缓存) 功能,可以把 Docker Hub(或任何 v2 registry)当上游,Harbor 自动代理并缓存。这样客户端只要在 daemon.json 里配好 registry-mirrors,拉取 docker.io/nginx 时就会从你的 Harbor 拿。
📝 步骤
1. 在 Harbor 创建一个 Proxy Cache 项目
-
用管理员账号登录 Harbor Web UI
-
点左侧 Projects → + New Project
-
填:
-
Project Name:随便,比如
dockerhub-proxy -
Access Level:Public(一般镜像站都是公开的)
-
Project Type:选择 Proxy Cache
-
Endpoint URL:填上游仓库地址,比如 Docker Hub:
https://registry-1.docker.io -
Provider:选择 Docker Hub(2.6+有下拉选项)
-
如果需要,可以配置上游的认证(私有 registry 才用得到)
-
-
创建完成后,你的 Harbor 里就多了一个 Proxy Cache 项目。
⚠️ Proxy Cache 项目一开始是空的,只有当客户端拉取某个镜像时,Harbor 才会去上游拉并缓存。
2. 配置 Docker 客户端
在要拉镜像的机器上,编辑 /etc/docker/daemon.json:
{
"registry-mirrors": ["https://harbor.example.com"]
}
如果你的 Harbor 用的是自签名证书或 http,要同时加
"insecure-registries": ["harbor.example.com"]。
重启 Docker:
sudo systemctl restart docker
3. 拉取镜像
现在就可以直接用原来的镜像名:
docker pull library/nginx:latest
Docker Engine 会把 docker.io/library/nginx 的请求发给 harbor.example.com。
Harbor 第一次会去 Docker Hub 拉取并缓存到本地;以后相同 tag 就从缓存取,速度快很多。
4. 验证缓存
在 Harbor Web UI → 进入 dockerhub-proxy 项目 → Repositories
你会看到刚才拉的镜像和 tag 已经出现了。
5. 可选:多个上游
Harbor Proxy Cache 允许为不同项目设置不同上游,例如:
dockerhub-proxy→ Docker Hubgcr-proxy→gcr.ioquay-proxy→quay.io
客户端只要在镜像名前加项目名即可,如:
docker pull harbor.example.com/gcr-proxy/google-containers/pause:3.6
💡 总结
- Harbor Proxy Cache = Harbor 做 Docker Hub 的代理缓存
- 客户端通过
registry-mirrors重定向 docker.io - 第一次拉镜像时 Harbor 后台去 Docker Hub 拉并缓存,后续直接用本地缓存

浙公网安备 33010602011771号