一、实验目标
本文记录一次在 Ubuntu Server 上部署 Harbor 私有镜像仓库的过程。
本次目标:
1. 安装 Harbor
2. 使用 HTTP 暴露 Harbor Web 面板
3. 配置 Docker 信任私有仓库
4. 登录 Harbor
5. 推送 nginx 镜像到 Harbor
6. 验证 Harbor 私有镜像仓库可用
二、实验环境
项目 信息
系统 Ubuntu Server
主机名 k8s-master
Harbor IP 172.16.11.142
Harbor 访问方式 HTTP
Harbor 端口 80
部署方式 Docker Compose
Harbor 版本 v2.14.3
Docker 版本 29.1.3
Docker Compose 版本 2.37.1
Harbor 访问地址:
http://172.16.11.142
三、创建 Harbor 数据目录
创建 Harbor 持久化数据目录:
sudo mkdir -p /mnt/harbor/{registry,database,redis,chartmuseum,jobservice,trivy}
各目录作用:
registry # 存放镜像数据
database # 存放 Harbor 数据库数据
redis # 存放 Redis 缓存和任务数据
chartmuseum # 存放 Helm Chart 数据
jobservice # 存放任务服务数据
trivy # 存放漏洞扫描数据
检查目录:
ls -lh /mnt/harbor
检查挂载情况:
df -h /mnt/harbor
本次实验中 /mnt/harbor 仍然在系统盘 / 下:
/dev/mapper/ubuntu–vg-ubuntu–lv 48G 11G 36G 23% /
如果是生产环境,建议单独挂载大容量磁盘到 /mnt/harbor。
四、下载 Harbor Online 安装包
进入用户目录:
cd ~
下载 Harbor online 安装包:
wget -c https://github.com/goharbor/harbor/releases/download/v2.14.3/harbor-online-installer-v2.14.3.tgz
检查安装包:
ls -lh harbor-online-installer-v2.14.3.tgz
解压:
tar -zxvf harbor-online-installer-v2.14.3.tgz
cd harbor
ls -lh
正常可以看到类似文件:
install.sh
harbor.yml.tmpl
prepare
五、修改 Harbor 配置文件
复制模板文件:
cp harbor.yml.tmpl harbor.yml
编辑配置文件:
nano harbor.yml
1. 修改 hostname
找到:
hostname: reg.mydomain.com
改成当前 Harbor 服务器 IP:
hostname: 172.16.11.142
2. 保留 HTTP
确认 HTTP 配置如下:
http:
port: 80
3. 关闭 HTTPS
实验环境先关闭 HTTPS,把 https 相关配置注释掉:
# https:
# port: 443
# certificate: /your/certificate/path
# private_key: /your/private/key/path
# strong_ssl_ciphers: false
4. 修改数据目录
找到:
data_volume: /data
改成:
data_volume: /mnt/harbor
最终关键配置如下:
hostname: 172.16.11.142
http:
port: 80
# https:
# port: 443
# certificate: /your/certificate/path
# private_key: /your/private/key/path
data_volume: /mnt/harbor
保存退出:
Ctrl + O
回车
Ctrl + X
六、配置 Docker 镜像加速
第一次安装时,Harbor 需要从 Docker Hub 拉取镜像。
如果出现类似错误:
Get “https://registry-1.docker.io/v2/”: connect: connection refused
可以配置 Docker 镜像加速。
创建 Docker 配置目录:
sudo mkdir -p /etc/docker
编辑配置文件:
sudo nano /etc/docker/daemon.json
写入以下内容:
{
“registry-mirrors”: [
“https://docker.m.daocloud.io”,
“https://docker.1ms.run”,
“https://docker.1panel.live”
]
}
重启 Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
测试拉取 Harbor prepare 镜像:
sudo docker pull goharbor/prepare:v2.14.3
成功输出类似:
Status: Downloaded newer image for goharbor/prepare:v2.14.3
docker.io/goharbor/prepare:v2.14.3
七、安装 Harbor
进入 Harbor 目录:
cd ~/harbor
执行安装:
sudo ./install.sh
安装完成后会看到:
✔ —-Harbor has been installed and started successfully.—-
这说明 Harbor 安装成功。
八、检查 Harbor 容器状态
查看 Docker Compose 服务状态:
cd ~/harbor
sudo docker compose ps
查看正在运行的容器:
sudo docker ps
检查 80 端口:
sudo ss -lntp | grep ‘:80’
正常应该看到类似:
LISTEN 0 4096 0.0.0.0:80 0.0.0.0:* users:((“docker-proxy”,pid=xxxx,fd=7))
九、访问 Harbor 面板
浏览器访问:
http://172.16.11.142
默认用户名:
admin
密码查看配置文件:
grep harbor_admin_password ~/harbor/harbor.yml
登录成功后,进入 Harbor Web 管理面板。
十、创建项目
在 Harbor 面板中:
项目 → 新建项目
项目名建议:
library
本次测试使用:
library
十一、配置 Docker 信任 HTTP 私有仓库
因为本次 Harbor 使用的是 HTTP,不是 HTTPS,所以 Docker 默认可能不允许登录和推送。
编辑 Docker 配置:
sudo nano /etc/docker/daemon.json
完整配置如下:
{
“registry-mirrors”: [
“https://docker.m.daocloud.io”,
“https://docker.1ms.run”,
“https://docker.1panel.live”
],
“insecure-registries”: [
“172.16.11.142”
]
}
重启 Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
注意:重启 Docker 后 Harbor 容器可能会停止,需要重新启动 Harbor:
cd ~/harbor
sudo docker compose up -d
sudo docker compose ps
再次检查端口:
sudo ss -lntp | grep ‘:80’
十二、登录 Harbor
执行:
sudo docker login 172.16.11.142
输入:
Username: admin
Password: Harbor 管理员密码
成功后会显示:
Login Succeeded
如果出现:
connect: connection refused
说明 Harbor 没启动,执行:
cd ~/harbor
sudo docker compose up -d
sudo docker compose ps
十三、推送 nginx 镜像到 Harbor
拉取 nginx 镜像:
sudo docker pull nginx:latest
给镜像重新打标签:
sudo docker tag nginx:latest 172.16.11.142/library/nginx:latest
推送到 Harbor:
sudo docker push 172.16.11.142/library/nginx:latest
推送成功会看到:
Pushed
latest: digest: sha256:xxxxxxxxxxxxxxxx size: 1778
本次实验成功输出:
latest: digest: sha256:e8490d0e8088a664e37b73579bea079d66385f42cf0dd814a77d53a5ee40776e size: 1778
十四、在 Harbor 面板验证
进入 Harbor Web 面板:
项目 → library → 镜像仓库
可以看到:
nginx
进入镜像后,可以看到标签:
latest
这说明 nginx 镜像已经成功推送到 Harbor 私有镜像仓库。
十五、测试从 Harbor 拉取镜像
先删除本地 Harbor tag:
sudo docker rmi 172.16.11.142/library/nginx:latest
再从 Harbor 拉取:
sudo docker pull 172.16.11.142/library/nginx:latest
如果能够成功拉取,说明 Harbor 的推送和拉取流程已经完整打通。
十六、常见问题总结
1. 找不到安装包
报错:
Cannot open: No such file or directory
原因:
当前目录没有 Harbor 安装包
解决:
ls
find ~ -name “harbor-*.tgz”
如果没有,就需要重新下载。
2. install.sh 找不到
报错:
sudo: ./install.sh: command not found
原因:
没有进入 harbor 解压目录
解决:
cd ~/harbor
sudo ./install.sh
3. Docker Hub 拉取失败
报错:
Get “https://registry-1.docker.io/v2/”: connect: connection refused
解决:
sudo nano /etc/docker/daemon.json
添加镜像加速:
{
“registry-mirrors”: [
“https://docker.m.daocloud.io”,
“https://docker.1ms.run”,
“https://docker.1panel.live”
]
}
然后重启 Docker:
sudo systemctl restart docker
4. Docker login 连接被拒绝
报错:
dial tcp 172.16.11.142:80: connect: connection refused
原因:
Harbor 容器没有启动,或者 80 端口没有监听
解决:
cd ~/harbor
sudo docker compose up -d
sudo docker compose ps
sudo ss -lntp | grep ‘:80’
5. HTTP 私有仓库无法登录
原因:
Docker 默认更信任 HTTPS 仓库
解决:
{
“insecure-registries”: [
“172.16.11.142”
]
}
然后重启 Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
十七、实验总结
本次实验完成了 Harbor 私有镜像仓库的部署和基础测试。
最终完成内容:
1. Harbor 安装成功
2. Harbor Web 面板访问成功
3. Docker 登录 Harbor 成功
4. 创建 library 项目
5. 推送 nginx:latest 镜像成功
6. Harbor 私有镜像仓库验证成功
本次 Harbor 地址:
http://172.16.11.142
测试镜像地址:
172.16.11.142/library/nginx:latest
至此,一个基础版 Harbor 私有镜像仓库已经搭建完成,可以用于后续 Kubernetes 镜像托管、CI/CD 镜像发布、内网镜像加速等场景。