Docker拉取鏡像部分成功部分失敗的解決方案
問題背景
部署 Zitadel 時,使用官方提供的 getting-started-with-zitadel.sh 腳本,腳本會拉取多個 Docker 鏡像,比如:
ghcr.io/zitadel/zitadeldocker.io/library/caddynetbirdio/**等
問題表現(xiàn)
在執(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)
觀察結(jié)果是:
| 鏡像 | 是否拉取成功 |
|---|---|
ghcr.io/zitadel/zitadel | ? 成功 |
docker.io/library/caddy | ? 成功 |
netbirdio/management / netbirdio/signal | ? 超時失敗 |

同時,我們很早就配置了一些 Docker Hub 鏡像加速器(如阿里云,騰訊云,DaoCloud 等),這也是為什么有些鏡像能順利拉取,有些卻不能的原因之一。
因?yàn)殓R像加速器僅能加速“Docker Hub 官方鏡像”,如 library/nginx 或 docker.io/library/caddy,而像 netbirdio/* 這種非官方項目的鏡像并不在加速器白名單內(nèi),因此仍然會拉取失敗。
初步排查
網(wǎng)絡(luò)本身沒有問題
ping registry-1.docker.io正常curl https://registry-1.docker.io/v2/正常docker login也沒有任何異常
但 Docker 拉取仍舊失敗
通過多次測試發(fā)現(xiàn),Docker 有些鏡像拉得飛快,有些鏡像卡死或超時,尤其是 docker.io/netbirdio 相關(guān)的鏡像。
這時開始懷疑:
可能和代理有關(guān)
解決思路:配置 Docker 的守護(hù)進(jìn)程代理
平時我們習(xí)慣配置終端代理,例如:
export http_proxy=http://127.0.0.1:7890 export https_proxy=http://127.0.0.1:7890
但實(shí)際上:
Docker 守護(hù)進(jìn)程(dockerd)是獨(dú)立運(yùn)行的,它不會繼承當(dāng)前 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
- 寫入以下內(nèi)容(根據(jù)你實(shí)際代理修改):
[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"
- 應(yīng)用配置并重啟 Docker:
sudo systemctl daemon-reexec sudo systemctl daemon-reload sudo systemctl restart docker
- 驗(yàn)證代理是否生效:
sudo systemctl show --property=Environment docker
輸出應(yīng)該包含你剛才設(shè)置的代理環(huán)境變量。
最終結(jié)果
重啟 Docker 后再次運(yùn)行部署腳本:
- 所有鏡像(包括 netbirdio)都能成功拉取
- 部署流程順利走完
總結(jié)
| 問題 | 結(jié)論 |
|---|---|
| Docker 部分鏡像拉取失敗 | 是由于 Docker 守護(hù)進(jìn)程未配置代理,而不是網(wǎng)絡(luò)本身問題 |
| 解決方案 | 配置 systemd 層面的 http-proxy.conf,讓 dockerd 使用代理 |
| 驗(yàn)證方式 | systemctl show --property=Environment docker 查看生效狀態(tài) |
經(jīng)驗(yàn)教訓(xùn)
- Docker CLI 和 Docker 守護(hù)進(jìn)程環(huán)境是 兩套東西,網(wǎng)絡(luò)設(shè)置互不影響
- 如果你使用代理加速訪問 Docker Hub,務(wù)必同步設(shè)置到 系統(tǒng)服務(wù)級別
- 部署復(fù)雜服務(wù)時,像 Zitadel 這類一鍵腳本可能集成很多鏡像,盡早配置好代理 可避免不必要的卡頓
- 配置鏡像加速器雖然有用,但僅限于部分鏡像。像
netbirdio、ghcr.io上的鏡像,加速器是無法覆蓋的,因此守護(hù)進(jìn)程代理是更通用的做法 - Docker 官方解決文檔
以上就是Docker拉取鏡像部分成功部分失敗的解決方案的詳細(xì)內(nèi)容,更多關(guān)于Docker拉取鏡像部分成功部分失敗的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
CentOS Stream 9 服務(wù)器 Docker 部署
本文詳細(xì)記錄了使用Docker部署KaiwuDB的過程,并包括模數(shù)據(jù)庫支持序表與關(guān)系表跨模查詢實(shí)戰(zhàn),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2026-06-06
快速使用docker-compose部署clickhouse的教程
ClickHouse 的工作速度比傳統(tǒng)方法快 100-1000 倍。它適用于大數(shù)據(jù)、業(yè)務(wù)分析和時間序列數(shù)據(jù)。在這個小教程中,我將向您展示如何以最少的設(shè)置安裝 ClickHouse,感興趣的朋友一起看看吧2021-11-11
Docker 與 Kubernetes 部署最佳實(shí)踐指南
本文介紹了Docker與Kubernetes部署的最佳實(shí)踐,涵蓋Dockerfile優(yōu)化、鏡像管理、容器運(yùn)行、Kubernetes部署配置、服務(wù)配置、配置管理、存儲管理、網(wǎng)絡(luò)配置、CI/CD集成、監(jiān)控與日志、安全最佳實(shí)踐、性能優(yōu)化、實(shí)際應(yīng)用場景及未來發(fā)展趨勢2026-04-04
Docker使用root用戶進(jìn)入容器的幾種方法小結(jié)
很多時候,拉取運(yùn)行的容器,進(jìn)入時,是非root賬戶,也不知道當(dāng)前賬戶的用戶密碼,甚至無賬戶,但在使用docker時,有時候需要以root用戶權(quán)限進(jìn)入容器進(jìn)行操作,所以本文介紹了Docker使用root用戶進(jìn)入容器的幾種方法,需要的朋友可以參考下2025-09-09
Docker mongoDB 4.2.1 安裝并收集springboot日志的步驟詳解
這篇文章主要介紹了Docker mongoDB 4.2.1 安裝并收集springboot日志,本文分步驟通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
如何使用Docker部署Xxl-Job分布式任務(wù)調(diào)度中心
XXL-Job是一個開源的分布式任務(wù)調(diào)度中心,它提供了一個可視化的任務(wù)管理界面,可以方便地創(chuàng)建、編輯和監(jiān)控任務(wù),本文詳細(xì)的講解了如何使用Docker部署xxl-job分布式任務(wù)調(diào)度服務(wù),感興趣的朋友跟隨小編一起看看吧2024-03-03
解決Docker安裝錯誤failure:repodata/repomd.xml from docke
在使用yum命令安裝docker或其他工具時可能會遇到failure_repodata_repomd.xmlfromdocker-ce-stable_[Errno256]Nomoremirrorstotry的錯誤,原因可能是yum源配置問題,解決方法包括重置yum源,刪除多余的repo文件2024-11-11

