文章

Harbor仓库http协议无法登录

Harbor仓库http协议无法登录

前言

在使用 Docker 时,搭建私有镜像仓库是一个常见的需求。Harbor 作为一款开源的镜像仓库管理工具,因其丰富的功能和良好的用户体验,受到了许多开发者的青睐。然而,在配置 Harbor 仓库时,如果使用的是 HTTP 协议,可能会遇到登录报错的问题。本文将详细讲解如何解决这一困扰。

问题现象

当尝试使用 HTTP 协议登录本地搭建的 Harbor 仓库时,可能会遇到以下报错信息:

1
2
3
4
5
6
7
8
9
docker login http://192.168.xx.xx
Username: admin
Password:
Error response from daemon: Get "https://192.168.xx.xx/v2/": dialing 192.168.xx.xx:443 matches static system exclude: connecting to 192.168.xx.xx:443: dial tcp 192.168.xx.xx:443: connect: connection refused

docker login http://192.168.xx.xx:80
Username: admin
Password:
Error response from daemon: Get "https://192.168.xx.xx:80/v2/": http: server gave HTTP response to HTTPS client

从错误信息可以看出,Docker 守护进程尝试通过 HTTPS 协议访问仓库,但实际仓库只支持 HTTP 协议,导致连接被拒绝。

解决方法

要解决这一问题,需要修改 Docker 的配置文件,允许其访问不安全的仓库。具体步骤如下:

修改 Docker 配置文件

  1. 打开 Docker 的配置文件 /etc/docker/daemon.json。如果该文件不存在,可以手动创建。

  2. 在配置文件中添加 "insecure-registries" 配置项,并将 Harbor 仓库的 HTTP 地址添加到该列表中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "insecure-registries": ["http://192.168.xx.xx:80"],  // 新增这一行
  "registry-mirrors": [
    "https://1nj0zren.mirror.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn",
    "http://f1361db2.m.daocloud.io",
    "https://registry.docker-cn.com"
  ]
}

重启 Docker 服务

修改配置文件后,需要重启 Docker 服务以使配置生效。可以使用以下命令:

1
sudo systemctl restart docker

再次尝试登录

重启 Docker 服务后,再次尝试登录 Harbor 仓库:

1
2
3
4
docker login http://192.168.xx.xx:80
Username: admin
Password:
Login Succeeded

此时,应该可以看到 “Login Succeeded” 的提示信息,表示登录成功。

本文由作者按照 CC BY 4.0 进行授权