环境: 自建 Harbor
、Docker
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
。