实验四:私有仓库搭建和验证 完整报告
一、实验目的
- 掌握 Docker Registry 和 Harbor 仓库的搭建;
- 掌握本地化仓库服务,实现镜像的 push / pull。
二、实验环境
- Ubuntu Linux
- Docker 29.7.2
- Harbor v2.15.2
- 本机 IP:
10.1.173.146(通过ip a获取,实际以本机为准)
注意:实验过程中 IP 可能因网络环境变化,请用
ip a确认实际 IP。
三、实验步骤
第一部分:使用 Docker Registry 搭建本地私有仓库
1. 拉取 registry 镜像
bashdocker pull registry
2. 创建并启动 registry 容器
bashdocker run -itd --name docker-registry --restart=always -p 5000:5000 registry:latest
3. 下载测试镜像 busybox 并打标签
bashdocker pull busyboxdocker tag busybox 10.1.173.146:5000/busybox:latestdocker images | grep busybox
4. 配置 daemon.json 添加 insecure-registries
编辑 /etc/docker/daemon.json,加入以下内容:
json{ "registry-mirrors": [ "https://docker.m.daocloud.io", "https://docker.1panel.live", "https://hub-mirror.c.163.com" ], "insecure-registries": [ "10.1.173.146:5000" ], "log-driver": "json-file", "log-opts": { "max-size": "500m", "max-file": "3" }}
注意:IP 必须是本机真实 IP,且必须带端口
:5000。
重启 Docker:
bashsudo systemctl daemon-reloadsudo systemctl restart docker
验证配置:
bashdocker info | grep -A 3 "Insecure Registries"
预期输出包含 10.1.173.146:5000。
5. 推送镜像到私有仓库
bashdocker push 10.1.173.146:5000/busybox:latest
6. 查看私有仓库中的镜像
bashcurl -XGET http://10.1.173.146:5000/v2/_catalogcurl -XGET http://10.1.173.146:5000/v2/busybox/tags/list
预期输出:
json{"repositories":["busybox"]}{"name":"busybox","tags":["latest"]}
7. 从私有仓库拉取镜像验证
bashdocker pull 10.1.173.146:5000/busybox:latest
第二部分:使用 Docker Harbor 搭建本地私有仓库
1. 安装 docker-compose
检查是否已安装:
bashdocker-compose version
如果没有,安装:
bashsudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composedocker-compose version
如果 GitHub 下载慢,可以使用代理:
bashsudo curl -L "https://mirror.ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose
2. 下载并解压 Harbor 离线安装包
从 GitHub 下载 Harbor 离线安装包(例如 harbor-offline-installer-v2.15.2.tgz),解压到 /usr/local/:
bashsudo tar -zxvf ~/Downloads/harbor-offline-installer-*.tgz -C /usr/local/cd /usr/local/harbor
3. 配置 harbor.yml
bashcp harbor.yml.tmpl harbor.ymlsudo vim harbor.yml
修改以下几项:
yamlhostname: 10.1.173.146 # 改成你的真实 IP# 注释掉 HTTPS 相关配置# https:# port: 443# certificate: /your/certificate/path# private_key: /your/private/key/pathdata_volume: /data/harbor # 数据目录,确保空间足够harbor_admin_password: Harbor12345
注意:不要删除模板中其他任何配置项(如
jobservice等),否则会报KeyError。
4. 创建数据目录
bashsudo mkdir -p /data/harbor
5. 安装 Harbor
bashsudo ./install.sh
看到 ✔ ----Harbor has been installed and started successfully.---- 即成功。
6. Web 访问并新建项目
浏览器打开:
texthttp://10.1.173.146
默认账号:admin,密码:Harbor12345。
登录后点击“新建项目”,项目名称填 myharbor,访问级别勾选“公开”,其他默认,点击确定。
7. 配置 Docker 并登录 Harbor
编辑 /etc/docker/daemon.json,在 insecure-registries 中加入 Harbor 地址(不带端口):
json"insecure-registries": [ "10.1.173.146:5000", "10.1.173.146"]
重启 Docker:
bashsudo systemctl daemon-reloadsudo systemctl restart docker
重启后,启动 Harbor 容器:
bashcd /usr/local/harborsudo docker-compose up -d
登录 Harbor(使用 localhost 避免 HTTP/HTTPS 问题):
bashdocker login localhost# 用户名:admin# 密码:Harbor12345
8. 打标签并推送镜像到 Harbor
bashdocker tag busybox localhost/myharbor/mybusybox_har:latestdocker push localhost/myharbor/mybusybox_har:latest
9. Web 查看验证
回到 Harbor 网页,进入 myharbor 项目,刷新页面,应能看到 mybusybox_har 镜像。
10. 从 Harbor 拉取镜像验证
bashdocker rmi localhost/myharbor/mybusybox_har:latestdocker pull localhost/myharbor/mybusybox_har:latest
四、遇到的问题及解决方法
问题 1:daemon.json 格式错误导致 Docker 启动失败
现象:
textJob for docker.service failed because the control process exited with error code.
原因:daemon.json 中重复了 registry-mirrors 键,且缺少逗号。
解决:用 tee 重写正确的 JSON:
bashsudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": [ "https://docker.m.daocloud.io", "https://docker.1panel.live", "https://hub-mirror.c.163.com" ], "insecure-registries": [ "10.1.173.146:5000" ], "log-driver": "json-file", "log-opts": { "max-size": "500m", "max-file": "3" }}EOF
然后用 python3 -m json.tool /etc/docker/daemon.json 校验格式。
问题 2:Harbor install.sh 报 KeyError: 'max_job_workers'
现象:
textKeyError: 'max_job_workers'KeyError: 'job_loggers'
原因:手动编写的 harbor.yml 缺少模板中必需的配置项。
解决:不要手写,而是从 harbor.yml.tmpl 复制后只修改必要项:
bashsudo cp harbor.yml.tmpl harbor.ymlsudo vim harbor.yml
只修改 hostname、data_volume,并注释掉 https 部分。
问题 3:docker login 报 502 Bad Gateway
现象:
textError response from daemon: login attempt to http://10.1.173.146/v2/ failed with status: 502 Bad Gateway
原因:Harbor 容器未运行(此前重启 Docker 导致所有容器停止)。
解决:重新启动 Harbor 容器:
bashcd /usr/local/harborsudo docker-compose up -d
确认所有容器为 Up 状态:
bashsudo docker-compose ps
问题 4:docker push 使用 IP 报 EOF
现象:
textfailed to do request: Head "https://10.1.173.146/v2/...": EOF
原因:Docker 29.x 在推送 blob 时强制尝试 HTTPS,而 Harbor 默认只监听 HTTP。
解决:改用 localhost 推送(Docker 默认将 localhost 视为不安全仓库,走 HTTP):
bashdocker login localhostdocker tag busybox localhost/myharbor/mybusybox_har:latestdocker push localhost/myharbor/mybusybox_har:latest
问题 5:docker push localhost 报 no basic auth credentials
现象:
textpush access denied, repository does not exist or may require authorization: authorization failed: no basic auth credentials
原因:未登录 localhost。
解决:
bashdocker login localhost
输入 admin / Harbor12345,然后重新推送。
问题 6:netstat 命令不存在
现象:
textsudo: 'netstat': command not found
解决:使用 ss 或 lsof 代替:
bashss -tlnp | grep 5000# 或sudo apt install lsoflsof -i :5000
五、证明实验完成的命令
Docker Registry 部分
bashdocker pull registrydocker run -itd --name docker-registry --restart=always -p 5000:5000 registry:latestdocker pull busyboxdocker tag busybox 10.1.173.146:5000/busybox:latestdocker push 10.1.173.146:5000/busybox:latestcurl -XGET http://10.1.173.146:5000/v2/_catalogcurl -XGET http://10.1.173.146:5000/v2/busybox/tags/listdocker pull 10.1.173.146:5000/busybox:latest
Harbor 部分
bashdocker-compose versioncd /usr/local/harborcp harbor.yml.tmpl harbor.ymlvim harbor.ymlsudo ./install.sh# 浏览器访问 http://10.1.173.146,登录 admin/Harbor12345,新建项目 myharborsudo vim /etc/docker/daemon.jsonsudo systemctl daemon-reload && sudo systemctl restart dockercd /usr/local/harbor && sudo docker-compose up -ddocker login localhostdocker tag busybox localhost/myharbor/mybusybox_har:latestdocker push localhost/myharbor/mybusybox_har:latestdocker rmi localhost/myharbor/mybusybox_har:latestdocker pull localhost/myharbor/mybusybox_har:latest
六、实验总结
- Docker Registry 轻量简单,适合快速搭建私有仓库;Harbor 功能丰富,提供 Web 界面和项目管理。
- 配置
insecure-registries是使用 HTTP 仓库的关键。 - Docker 新版本对 HTTP 仓库的兼容性可能导致推送失败,使用
localhost可绕过该问题。 - 修改
daemon.json或harbor.yml后务必校验格式,避免服务启动失败。 - 重启 Docker 后,需重新启动 Harbor 容器(
docker-compose up -d)。 - 实验完成了镜像的推送、查询、拉取全流程,验证了私有仓库的可用性。
实验四完成。





