本文最后更新于 446 天前(2025-05-12),部分内容可能已经过时。

直接一幅图说明白 Harbor 干嘛用的
下载安装#
确保服务器有 docker 和 docker compose
两个链接分别是 官方 docs 和 github Release 页面。我下载 offline 版本的。会带上镜像
Harbor docs | Harbor Installation and Configuration
Release v2.12.3 · goharbor/harbor · GitHub
英语水平有限,装的我头昏脑胀,整体还是简单的
tar -xzvf 安装包.tgz

解压后目录结构如上。 其中 docker-compose.yml,common目录。是脚本后续生成的,nginx 目录是我创建的。大概就是这样
复制 harbor.yml.tmpl -> harbor.yml
主要配置点就在于
- hostname
- http->port
- https
- external_url
如下图所示

因为我是需要另外一台服务器的 nginx 做反代,但是刚开始部署我想简单测试一下(就是这个不灵清的想法折腾我一个多小时)
我以为 hostname 在配置了external_url 后会失效。于是还是内网地址 172.16.100.1
然后用 openssl 自签名了证书。然后配了 external_url
接着在我的客户端电脑上 配置了/etc/hosts
172.16.100.1 hub.test.cn
结果就是能访问,但是到下一步。我清掉本地配置。去配置公网服务器的时候
死活打不通,要么就是页面能到,要么就是 无法登录。自己琢磨半天越想越绕,(这里真的基础功力不够深厚,来个老法师估计十分钟搞完了)
最后参考了别人的文章
在 HTTPS 的反向代理 Nginx 后运行 HTTP Harbor | 星辰狂澜’s Blog
私有镜像仓库 Harbor 安装和使用 - 冯威的博客
结论配置就是这样

另外反代 nginx 的配置如下
[nginx] 显示已折叠代码(45 行)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| server {
server_name hub.test.cn;
client_max_body_size 2000M;
gzip on;
location / {
proxy_pass http://172.16.100.1:7880;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrate";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header referer $http_referer;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /v2/ {
proxy_pass http://172.16.100.1:7880/v2/;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrate";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header referer $http_referer;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /service/ {
proxy_pass http://172.16.100.1:7880/service/;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrate";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header referer $http_referer;
proxy_set_header X-Forwarded-Proto $scheme;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
|
这样终于能走通了
docker login#
另外两个点记录一下,有关docker login
这里是问的 chatgpt。我是 mac 系统,存储少得可怜。所以我用的是 Colima+docker
配置 docker 的方式不太一样
这里没有当时的截图了,总之就是 docker login 172.16.99.32:7880 失败
然后配置如下即可
第一步:关闭当前的 Colima 实例#
第二步:编辑 Colima 的配置文件(添加insecure-registries)#
运行以下命令编辑配置:
此命令会打开一个编辑器(通常是 vim),在其中添加或修改以下配置:
1
2
3
4
| # 示例配置
docker:
insecureRegistries:
- 172.16.100.1:7880
|
⚠️ 注意缩进必须是空格,不要使用 tab。
第四步:验证配置是否生效#
你可以运行以下命令确认 registry 已被识别为不安全仓库:
1
| docker info | grep -A 5 "Insecure Registries"
|
应该能看到你配置的 IP 和端口,比如:
1
2
3
| Insecure Registries:
172.16.100.1:7880
127.0.0.0/8
|
走域名,外网的时候,要注意external_url 的配置。如果你的访问带端口,那这里的配置也要带端口。我是没有配置的,所以这里正常写就通了
最后测试一下 新建一个项目 test1

docker login hub.test.cn
输入用户名密码,成功可以看到如下

tag 我的本地nginx 镜像试试
docker tag nginx:latest hub.test.cn/test1/nginx:latest
然后
docker push hub.test.cn/test1/nginx:latest

ok 完成。后续就可以使用它来管理用户 分发镜像,配置 webhook 实现 CI/CD等