docker login 报错: http: server gave HTTP response to HTTPS client

环境: 自建 HarborDocker

1. 问题分析

# 命令,这里用的是 IP,可以为域名
docker login -u test 172.16.51.182:31120
# 输入密码
Password:

# 报错如下: 
Error response from daemon: Get "https://172.16.51.182:31120/v2/": 
http: server gave HTTP response to HTTPS client

这个错误提示意味着的 Docker 客户端正在尝试通过 HTTPS 协议连接到一个只接受 HTTP 连接的服务器。这是因为 Docker 默认会尝试使用 HTTPS 连接到 Docker Registry

按照标准流程来说,应该 Harbor 仓库地址应该支持 Https

如果对安全要求不高的话,可以通过一个简单的方式处理:

直接在 Docker 的配置文件中明确指定 Docker Registry 服务器使用 HTTP 协议来解决这个问题。

以下是如何修改 Docker 的配置文件的步骤:

2. 处理方式

2.1 打开或创建 Docker 配置文件

这个文件通常位于 /etc/docker/daemon.json。如果该文件不存在,可以创建一个。

2.2 编辑 Docker 配置文件

选择自己熟悉的编辑器即可。

# 使用 vim
vim /etc/docker/daemon.json

在该文件中添加 insecure-registries 字段,并将 Docker Registry 服务器地址加入到这个字段的值中。例如上面的地址 172.16.51.182:31120(或域名):

{
  // ...
  "insecure-registries" : ["172.16.51.182:31120"]
  // ...
}

根据实际情况,替换为自己的 Docker Registry 服务器的地址。

2.3 保存并关闭配置文件。

保存并关闭配置文件。

2.4 重新启动 Docker 服务。

在大多数 Linux 发行版中,可以使用以下命令来重启 Docker 服务:

sudo systemctl restart docker

大功告成,然后继续 HTTP 协议连接到相应的 Docker Registry 服务器。

docker login -u test 172.16.51.182:31120

# 会提示让输入密码:
Password:

# 登录成功
Login Succeeded

【注】上面的算是一个骚操作,但是还是建议 Docker Registry 镜像仓库服务器支持 HTTPS

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注