【解決方法】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、有用記得回來點個贊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章