应用容器引擎实践(docker)实验四

2026-09-19我也不知道取什么名字👁 2 阅读📝 1373 字12 分钟阅读💬 0 评论
应用容器引擎实践(docker)实验四

实验四:私有仓库搭建和验证 完整报告

一、实验目的

  1. 掌握 Docker Registry 和 Harbor 仓库的搭建;
  2. 掌握本地化仓库服务,实现镜像的 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 镜像

bash
docker pull registry

2. 创建并启动 registry 容器

bash
docker run -itd --name docker-registry --restart=always -p 5000:5000 registry:latest

3. 下载测试镜像 busybox 并打标签

bash
docker 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:

bash
sudo systemctl daemon-reloadsudo systemctl restart docker

验证配置:

bash
docker info | grep -A 3 "Insecure Registries"

预期输出包含 10.1.173.146:5000

5. 推送镜像到私有仓库

bash
docker push 10.1.173.146:5000/busybox:latest

6. 查看私有仓库中的镜像

bash
curl -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. 从私有仓库拉取镜像验证

bash
docker pull 10.1.173.146:5000/busybox:latest

第二部分:使用 Docker Harbor 搭建本地私有仓库

1. 安装 docker-compose

检查是否已安装:

bash
docker-compose version

如果没有,安装:

bash
sudo 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 下载慢,可以使用代理:

bash
sudo 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/

bash
sudo tar -zxvf ~/Downloads/harbor-offline-installer-*.tgz -C /usr/local/cd /usr/local/harbor

3. 配置 harbor.yml

bash
cp harbor.yml.tmpl harbor.ymlsudo vim harbor.yml

修改以下几项:

yaml
hostname: 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. 创建数据目录

bash
sudo mkdir -p /data/harbor

5. 安装 Harbor

bash
sudo ./install.sh

看到 ✔ ----Harbor has been installed and started successfully.---- 即成功。

6. Web 访问并新建项目

浏览器打开:

text
http://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:

bash
sudo systemctl daemon-reloadsudo systemctl restart docker

重启后,启动 Harbor 容器:

bash
cd /usr/local/harborsudo docker-compose up -d

登录 Harbor(使用 localhost 避免 HTTP/HTTPS 问题):

bash
docker login localhost# 用户名:admin# 密码:Harbor12345

8. 打标签并推送镜像到 Harbor

bash
docker tag busybox localhost/myharbor/mybusybox_har:latestdocker push localhost/myharbor/mybusybox_har:latest

9. Web 查看验证

回到 Harbor 网页,进入 myharbor 项目,刷新页面,应能看到 mybusybox_har 镜像。

10. 从 Harbor 拉取镜像验证

bash
docker rmi localhost/myharbor/mybusybox_har:latestdocker pull localhost/myharbor/mybusybox_har:latest

四、遇到的问题及解决方法

问题 1:daemon.json 格式错误导致 Docker 启动失败

现象

text
Job for docker.service failed because the control process exited with error code.

原因daemon.json 中重复了 registry-mirrors 键,且缺少逗号。

解决:用 tee 重写正确的 JSON:

bash
sudo 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.shKeyError: 'max_job_workers'

现象

text
KeyError: 'max_job_workers'KeyError: 'job_loggers'

原因:手动编写的 harbor.yml 缺少模板中必需的配置项。

解决:不要手写,而是从 harbor.yml.tmpl 复制后只修改必要项:

bash
sudo cp harbor.yml.tmpl harbor.ymlsudo vim harbor.yml

只修改 hostnamedata_volume,并注释掉 https 部分。


问题 3:docker login502 Bad Gateway

现象

text
Error response from daemon: login attempt to http://10.1.173.146/v2/ failed with status: 502 Bad Gateway

原因:Harbor 容器未运行(此前重启 Docker 导致所有容器停止)。

解决:重新启动 Harbor 容器:

bash
cd /usr/local/harborsudo docker-compose up -d

确认所有容器为 Up 状态:

bash
sudo docker-compose ps

问题 4:docker push 使用 IP 报 EOF

现象

text
failed to do request: Head "https://10.1.173.146/v2/...": EOF

原因:Docker 29.x 在推送 blob 时强制尝试 HTTPS,而 Harbor 默认只监听 HTTP。

解决:改用 localhost 推送(Docker 默认将 localhost 视为不安全仓库,走 HTTP):

bash
docker login localhostdocker tag busybox localhost/myharbor/mybusybox_har:latestdocker push localhost/myharbor/mybusybox_har:latest

问题 5:docker push localhostno basic auth credentials

现象

text
push access denied, repository does not exist or may require authorization: authorization failed: no basic auth credentials

原因:未登录 localhost

解决

bash
docker login localhost

输入 admin / Harbor12345,然后重新推送。


问题 6:netstat 命令不存在

现象

text
sudo: 'netstat': command not found

解决:使用 sslsof 代替:

bash
ss -tlnp | grep 5000# 或sudo apt install lsoflsof -i :5000

五、证明实验完成的命令

Docker Registry 部分

bash
docker 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 部分

bash
docker-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

六、实验总结

  1. Docker Registry 轻量简单,适合快速搭建私有仓库;Harbor 功能丰富,提供 Web 界面和项目管理。
  2. 配置 insecure-registries 是使用 HTTP 仓库的关键。
  3. Docker 新版本对 HTTP 仓库的兼容性可能导致推送失败,使用 localhost 可绕过该问题。
  4. 修改 daemon.jsonharbor.yml 后务必校验格式,避免服务启动失败。
  5. 重启 Docker 后,需重新启动 Harbor 容器(docker-compose up -d)。
  6. 实验完成了镜像的推送、查询、拉取全流程,验证了私有仓库的可用性。

实验四完成。

我也不知道取什么名字
技术博客作者
1373 字 · 0 评论
2026-09-19

评论 (0)

暂无评论,来写第一条吧

登录后发表评论