背景
自建 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、有用記得回來點個贊