【解决方法】Docker push 报错「server gave HTTP response to HTTPS client」

背景

自建 Docker 本地私有仓库。

准备 push 到仓库,报标题错误。

少啰嗦,直接上解决方案。

解决方案

如果你 docker push 的时候报错内容和我上面一样,那是因为客户端push的时候采用https协议,而registry未使用https导致的。

修改 /etc/docker/daemon.json 文件(如果没有就创建新的),并写入如下内容:

{ 
	"insecure-registries":[
		"192.168.0.110:5000",
		"localdockerreghost:5000"
	] 
}

其中,把 192.168.0.110 换成你自己 registry 服务 的地址。

localdockerreghost 是我在 /etc/hosts 文件中自定义的主机名,和 192.168.0.110 是同一个,用起来比纯 ip 更方便点。

修改完成之后,重启 docker 服务。

[root@localhost ~]# service docker restart

重启完成之后可能还会报错,如果你的 registry 服务 是运行在本地,看看你的 registry 服务 是不是没起来。

问题分析

先看看我都执行了哪些指令(除了安装 docker):

1、启动 registry 镜像

[root@localhost ~]# docker run -d -p 5000:5000 --restart=always --name registry registry:2
a9f69aadb55eddc64a0431d0f9a1826c18286721610acde1dc7cd6a92d1fa549

2、查看本地镜像

[root@localhost ~]# docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
registry                         2                   f32a97de94e1        8 months ago        25.8MB
hello-world                      latest              fce289e99eb9        11 months ago       1.84kB

3、给镜像加 tag

[root@localhost ~]# docker tag hello-world localdockerreghost:5000/hwtest

4、再次查看本地镜像,可以看到,已经有新内容了

[root@localhost ~]# docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
registry                         2                   f32a97de94e1        8 months ago        25.8MB
hello-world                      latest              fce289e99eb9        11 months ago       1.84kB
localdockerreghost:5000/hwtest   latest              fce289e99eb9        11 months ago       1.84kB

5、用 docker push 上传标记的镜像

[root@localhost ~]# docker push localdockerreghost:5000/hwtest
The push refers to repository [localdockerreghost:5000/hwtest]
af0b15c8625b: Pushed
latest: digest: sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a size: 524

上面的 localdockerreghost 是我在 /etc/hosts 中定义好的主机名。

6、查看仓库中的镜像

[root@localhost ~]# curl http://192.168.0.110:5000/v2/_catalog
{"repositories":["hwtest"]}

完美。

这里有几点需要注意哈:

1、 修改 /etc/docker/daemon.json 文件,是要修改客户端的文件,而不是服务端(registry 服务

2、修改完 /etc/docker/daemon.json 文件,要重启 docker 服务

3、如果 registry 服务 运行在本地,也要记得启动 registry

4、有用记得回来点个赞

你可能感兴趣的:(运维,docker,docker,registry)