Docker拉取鏡像部分成功部分失敗的解決方案
問題背景
部署 Zitadel 時,使用官方提供的 getting-started-with-zitadel.sh 腳本,腳本會拉取多個 Docker 鏡像,比如:
ghcr.io/zitadel/zitadeldocker.io/library/caddynetbirdio/**等
問題表現
在執(zhí)行過程中,有些鏡像可以拉取成功,有些會報如下錯誤:
Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
觀察結果是:
| 鏡像 | 是否拉取成功 |
|---|---|
ghcr.io/zitadel/zitadel | ? 成功 |
docker.io/library/caddy | ? 成功 |
netbirdio/management / netbirdio/signal | ? 超時失敗 |

同時,我們很早就配置了一些 Docker Hub 鏡像加速器(如阿里云,騰訊云,DaoCloud 等),這也是為什么有些鏡像能順利拉取,有些卻不能的原因之一。
因為鏡像加速器僅能加速“Docker Hub 官方鏡像”,如 library/nginx 或 docker.io/library/caddy,而像 netbirdio/* 這種非官方項目的鏡像并不在加速器白名單內,因此仍然會拉取失敗。
初步排查
網絡本身沒有問題
ping registry-1.docker.io正常curl https://registry-1.docker.io/v2/正常docker login也沒有任何異常
但 Docker 拉取仍舊失敗
通過多次測試發(fā)現,Docker 有些鏡像拉得飛快,有些鏡像卡死或超時,尤其是 docker.io/netbirdio 相關的鏡像。
這時開始懷疑:
可能和代理有關
解決思路:配置 Docker 的守護進程代理
平時我們習慣配置終端代理,例如:
export http_proxy=http://127.0.0.1:7890 export https_proxy=http://127.0.0.1:7890
但實際上:
Docker 守護進程(dockerd)是獨立運行的,它不會繼承當前 shell 的代理環(huán)境變量!
解決方案:配置 Docker 的 systemd 代理
- 創(chuàng)建代理配置目錄(如不存在):
sudo mkdir -p /etc/systemd/system/docker.service.d
- 創(chuàng)建代理配置文件:
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
- 寫入以下內容(根據你實際代理修改):
[Service] Environment="HTTP_PROXY=http://127.0.0.1:7890" Environment="HTTPS_PROXY=http://127.0.0.1:7890" Environment="NO_PROXY=localhost,127.0.0.1,.corp"
- 應用配置并重啟 Docker:
sudo systemctl daemon-reexec sudo systemctl daemon-reload sudo systemctl restart docker
- 驗證代理是否生效:
sudo systemctl show --property=Environment docker
輸出應該包含你剛才設置的代理環(huán)境變量。
最終結果
重啟 Docker 后再次運行部署腳本:
- 所有鏡像(包括 netbirdio)都能成功拉取
- 部署流程順利走完
總結
| 問題 | 結論 |
|---|---|
| Docker 部分鏡像拉取失敗 | 是由于 Docker 守護進程未配置代理,而不是網絡本身問題 |
| 解決方案 | 配置 systemd 層面的 http-proxy.conf,讓 dockerd 使用代理 |
| 驗證方式 | systemctl show --property=Environment docker 查看生效狀態(tài) |
經驗教訓
- Docker CLI 和 Docker 守護進程環(huán)境是 兩套東西,網絡設置互不影響
- 如果你使用代理加速訪問 Docker Hub,務必同步設置到 系統(tǒng)服務級別
- 部署復雜服務時,像 Zitadel 這類一鍵腳本可能集成很多鏡像,盡早配置好代理 可避免不必要的卡頓
- 配置鏡像加速器雖然有用,但僅限于部分鏡像。像
netbirdio、ghcr.io上的鏡像,加速器是無法覆蓋的,因此守護進程代理是更通用的做法 - Docker 官方解決文檔
以上就是Docker拉取鏡像部分成功部分失敗的解決方案的詳細內容,更多關于Docker拉取鏡像部分成功部分失敗的資料請關注腳本之家其它相關文章!
相關文章
快速使用docker-compose部署clickhouse的教程
ClickHouse 的工作速度比傳統(tǒng)方法快 100-1000 倍。它適用于大數據、業(yè)務分析和時間序列數據。在這個小教程中,我將向您展示如何以最少的設置安裝 ClickHouse,感興趣的朋友一起看看吧2021-11-11
Docker mongoDB 4.2.1 安裝并收集springboot日志的步驟詳解
這篇文章主要介紹了Docker mongoDB 4.2.1 安裝并收集springboot日志,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
解決Docker安裝錯誤failure:repodata/repomd.xml from docke
在使用yum命令安裝docker或其他工具時可能會遇到failure_repodata_repomd.xmlfromdocker-ce-stable_[Errno256]Nomoremirrorstotry的錯誤,原因可能是yum源配置問題,解決方法包括重置yum源,刪除多余的repo文件2024-11-11

