Docker拉取鏡像超時的原因分析與解決方法
前言
最近在使用 Docker 拉取鏡像時,遇到了一連串令人抓狂的超時報錯:
ERROR: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection
這問題聽起來熟悉嗎?網上一搜,大家都建議你配置國內鏡像源。但我試了好幾個,照做之后依然拉!不!動!,仿佛鏡像倉庫從地球被搬到了火星。
于是,我花了一整天翻資料、試配置,最終完美解決。今天就來詳細分享這趟“排雷”過程,以及一個隱藏的關鍵點,希望能幫你徹底解決 Docker 拉取鏡像超時的問題。
一、問題現象
在執(zhí)行如下命令拉取鏡像時:
docker pull nginx
Docker 會嘗試從默認倉庫 https://registry-1.docker.io/v2/ 拉取,但出現了下面這個報錯:
Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection
這個錯誤大概率是因為網絡問題,連接 Docker 官方倉庫超時。國內訪問 Docker Hub 一直不算穩(wěn)定,加速器成了剛需。
二、常規(guī)解決方案:配置國內鏡像源
大部分教程都建議配置 /etc/docker/daemon.json 文件(沒有就新建一個),內容如下:
{ "registry-mirrors": [ "https://docker.1panel.live", "https://dc.j8.work", "https://docker.m.daocloud.io", "https://dockerproxy.com", "https://docker.mirrors.ustc.edu.cn", "https://docker.nju.edu.cn" ] }
配置完之后重啟 Docker:
systemctl daemon-reexec
systemctl restart docker
理論上應該可以了……結果還是超時!
三、深入排查:這些隱藏配置你加了嗎
在我反復嘗試多種鏡像源無果之后,我開始懷疑:
是不是僅僅配置 registry-mirrors 不夠?
答案是:是的!
我最終使用了下面這份更全面的配置,才真正解決問題:
{ "registry-mirrors": [ "https://docker.registry.cyou", "https://docker-cf.registry.cyou", "https://dockercf.jsdelivr.fyi", "https://docker.jsdelivr.fyi", "https://dockertest.jsdelivr.fyi", "https://mirror.aliyuncs.com", "https://dockerproxy.com", "https://mirror.baidubce.com", "https://docker.m.daocloud.io", "https://docker.nju.edu.cn", "https://docker.mirrors.sjtug.sjtu.edu.cn", "https://docker.mirrors.ustc.edu.cn", "https://mirror.iscas.ac.cn", "https://docker.rainbond.cc", "https://do.nark.eu.org", "https://dc.j8.work", "https://gst6rzl9.mirror.aliyuncs.com", "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "http://mirrors.ustc.edu.cn/", "https://mirrors.tuna.tsinghua.edu.cn/", "http://mirrors.sohu.com/" ], "insecure-registries": [ "registry.docker-cn.com", "docker.mirrors.ustc.edu.cn" ], "debug": true, "experimental": false }
幾個關鍵點必須解釋清楚:
1.鏡像源要夠多
不是所有鏡像都適用于你當前的網絡環(huán)境,多加幾個備用,不僅速度快,還能防止單點故障。
2.添加 insecure-registries
有些鏡像源不支持 HTTPS,或你所在的網絡環(huán)境中存在中間人干擾,Docker 默認不會信任這些源。通過加上 "insecure-registries",你明確告訴 Docker:“我信它!”
3.debug 和 experimental 參數
這兩個不是解決問題的核心,但建議開啟 debug: true,可以打印更多日志方便后續(xù)排查。
四、完整操作流程總結
編輯或新建 /etc/docker/daemon.json:
sudo nano /etc/docker/daemon.json
粘貼上面的配置內容。
重啟 Docker:
sudo systemctl daemon-reexec sudo systemctl restart docker
驗證是否生效:
docker info
在輸出中找到 "Registry Mirrors" 字段,如果配置的鏡像源都顯示出來了,就說明生效了。
五、額外建議
科學上網優(yōu)先:如果你有穩(wěn)定的代理,其實使用官方鏡像源也沒問題。
測試鏡像加速效果:可以用 curl 命令去訪問鏡像源,看響應速度。
定期更新鏡像源列表:有些鏡像站可能過期、下線,保持新鮮有助于穩(wěn)定。
六、寫在最后
Docker 鏡像拉取超時這個坑,真的是國內開發(fā)者的“入門之痛”。
到此這篇關于Docker拉取鏡像超時的原因分析與解決方法的文章就介紹到這了,更多相關Docker拉取鏡像超時內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解Docker 下開發(fā) hyperf 完整使用示例
這篇文章主要介紹了詳解Docker 下開發(fā) hyperf 完整使用示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-01-01Docker Gitlab+Jenkins+Harbor構建持久化平臺操作
這篇文章主要介紹了Docker Gitlab+Jenkins+Harbor構建持久化平臺操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11Dockerfile中ENTRYPOINT 和 CMD的區(qū)別說明
這篇文章主要介紹了Dockerfile中ENTRYPOINT 和 CMD的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11備份Docker容器中的PostgreSQL數據的圖文實操教程
現在docker容器很方便,可以一鍵部署項目,但是方便部署的同時,也給運維帶來了麻煩,docker中的pgsql數據,如何進行備份呢,本文小編給大家就介紹了備份Docker容器中的PostgreSQL數據的圖文實操教程,需要的朋友可以參考下2024-09-09使用Docker部署的基于binlog實現Mysql8的操作方法
MySQL 基于?Binlog?的主從復制(Master-Slave Replication)是 MySQL 數據庫中實現數據復制的一種機制,這篇文章主要介紹了使用Docker部署的基于binlog實現Mysql8,需要的朋友可以參考下2025-01-01