Docker拉取鏡像/?搜索失敗問(wèn)題的徹底解決方案
前言
Docker 網(wǎng)絡(luò)相關(guān)問(wèn)題(如拉取鏡像、搜索鏡像時(shí)超時(shí)或報(bào)錯(cuò))是使用過(guò)程中常見的困擾,尤其國(guó)內(nèi)用戶常受官方鏡像源訪問(wèn)慢、DNS 解析異常等問(wèn)題影響。本文將詳細(xì)梳理問(wèn)題根源,提供從鏡像加速、DNS 配置到代理設(shè)置的完整解決流程,幫你徹底解決相關(guān)網(wǎng)絡(luò)故障。
一、問(wèn)題現(xiàn)象與核心原因
常見報(bào)錯(cuò)
拉取鏡像時(shí)卡頓超時(shí),始終停留在 “Pulling from xxx” 階段。

明確報(bào)錯(cuò):
Error response from daemon: Get "https://index.docker.io/v1/search?q=ubuntu&n=25": dial tcp: lookup index.docker.io on 127.0.0.53:53: server misbehaving。配置國(guó)內(nèi)加速源后,問(wèn)題仍未解決,鏡像仍優(yōu)先嘗試連接官方源
https://registry-1.docker.io/v2/。
核心原因
國(guó)內(nèi)網(wǎng)絡(luò)訪問(wèn) Docker 官方鏡像源存在天然限制,速度慢且易中斷。
Docker 守護(hù)進(jìn)程與容器的 DNS 配置相互獨(dú)立,容器 DNS 配置不影響守護(hù)進(jìn)程拉取鏡像時(shí)的 DNS 解析。
Docker 守護(hù)進(jìn)程不會(huì)繼承終端的代理環(huán)境變量,需單獨(dú)配置代理才能通過(guò)科學(xué)上網(wǎng)訪問(wèn)鏡像源。
二、分步解決流程
第一步:配置國(guó)內(nèi)鏡像加速源
國(guó)內(nèi)加速源僅作為官方源的輔助加速通道,無(wú)法解決 DNS 或網(wǎng)絡(luò)訪問(wèn)限制問(wèn)題,但能提升后續(xù)訪問(wèn)成功率。
編輯 Docker 守護(hù)進(jìn)程配置文件:
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.imgdb.de",
"https://docker-0.unsee.tech",
"https://docker.hlmirror.com",
"https://docker.1ms.run",
"https://func.ink",
"https://lispy.org",
"https://docker.xiaogenban1993.com"
]
}
EOF2.重新加載配置并重啟 Docker:
sudo systemctl daemon-reload && sudo systemctl restart docker
后來(lái)才發(fā)現(xiàn) docker還是首先去其官方拉取 "https://registry-1.docker.io/v2/" ,我們所謂的國(guó)內(nèi)加速源是起到一個(gè)輔助加速作用。
我們的daemon.json 配得沒(méi)問(wèn)題了之后,再去運(yùn)行拉取,發(fā)現(xiàn)還是報(bào)錯(cuò)了。
Error response from daemon: Get "https://index.docker.io/v1/search?q=ubuntu&n=25": dial tcp: lookup index.docker.io on 127.0.0.53:53: server misbehaving
這時(shí)候我們會(huì)想是不是 DNS域名 解析的問(wèn)題。 我們一般會(huì)又去檢查 daemon.json文件,然后給它添加域名解析

會(huì)發(fā)現(xiàn)還是會(huì)報(bào)錯(cuò),重啟docker之后也還會(huì)。 這時(shí)候就可以發(fā)現(xiàn)其實(shí)是我們的docker的守護(hù)進(jìn)程的問(wèn)題,是Docker 守護(hù)進(jìn)程自己在用 127.0.0.53 這個(gè) DNS,而不是你在 daemon.json 里配的那些 8.8.8.8 / 223.5.5.5。
"dns": [...] 這項(xiàng)只影響 容器里的 /etc/resolv.conf, 但是 Docker 守護(hù)進(jìn)程拉鏡像時(shí)的 DNS 仍走的是宿主機(jī)的 /etc/resolv.conf(現(xiàn)在是 127.0.0.53,那就是 systemd-resolved 的 stub)。
然后我們就需要去更改宿主機(jī)里面的設(shè)置。
第二步:修復(fù) Docker 守護(hù)進(jìn)程 DNS 解析問(wèn)題
Docker 守護(hù)進(jìn)程拉取鏡像時(shí)使用的是宿主機(jī)的 /etc/resolv.conf 配置,而非 daemon.json 中的 dns 字段,需通過(guò)修改系統(tǒng) DNS 解決解析異常。
編輯系統(tǒng) DNS 配置文件
sudo nano /etc/systemd/resolved.conf
把里面改成類似這樣(沒(méi)有就加,有就改):
[Resolve] DNS=8.8.8.8 223.5.5.5 114.114.114.114 FallbackDNS=1.1.1.1 # 可選:如果你有本地默認(rèn)域,就留著;沒(méi)有就可以注釋掉 # Domains=~.
(2)重啟 systemd-resolved:
sudo systemctl restart systemd-resolved
(3) 確認(rèn)現(xiàn)在 DNS 正常工作:
resolvectl status resolvectl query index.docker.io

這樣的話,說(shuō)明我們已經(jīng)把DNS解析的問(wèn)題弄好了。
(4)再重啟 Docker:
sudo systemctl restart docker
(5)再試一次 Docker 搜索:
sudo docker search ubuntu
但是發(fā)現(xiàn)還是報(bào)錯(cuò)了,這時(shí)候就需要 科學(xué)上網(wǎng)了。
第三步:配置 Docker 守護(hù)進(jìn)程代理(科學(xué)上網(wǎng))
(1)先確認(rèn)自己的虛擬機(jī)里面開代理是否能訪問(wèn)Docker Hub:
# 1. 開啟終端代理 export http_proxy="http://127.0.0.1:7890" export https_proxy="http://127.0.0.1:7890" # 2. 用 curl 直接請(qǐng)求 Docker Hub 的 search 接口 curl "https://index.docker.io/v1/search?q=ubuntu&n=5" -v

若 curl 命令返回 200 狀態(tài)碼且能獲取搜索結(jié)果,說(shuō)明終端代理有效。
(2)給 Docker 守護(hù)進(jìn)程配置 HTTP/HTTPS 代理
Docker 是一個(gè) systemd 服務(wù),它不會(huì)自動(dòng)繼承你終端里的 export http_proxy, 要 單獨(dú)給 dockerd 配置環(huán)境變量。
創(chuàng)建配置目錄:
sudo mkdir -p /etc/systemd/system/docker.service.d
新建代理配置文件:
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,::1"
讓 systemd 重新加載服務(wù)配置并重啟 Docker:
sudo systemctl daemon-reload sudo systemctl restart docker
驗(yàn)證 dockerd 確實(shí)帶上了代理環(huán)境變量:
systemctl show docker | grep -i environment

發(fā)現(xiàn)ok
再試一次 docker search
sudo docker search ubuntu

問(wèn)題解決。
總結(jié)
到此這篇關(guān)于Docker拉取鏡像/搜索失敗問(wèn)題徹底解決方案的文章就介紹到這了,更多相關(guān)Docker拉取鏡像搜索失敗問(wèn)題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker容器內(nèi)安裝TensorRT的問(wèn)題
很多朋友在使用docker容器內(nèi)安裝TensorRT的時(shí)候,遇到一大堆棘手的問(wèn)題,不知道怎么處理好了,今天小編就docker安裝TensorRT的問(wèn)題給大家詳細(xì)介紹下,感興趣的朋友一起看看吧2021-05-05
Docker刪除某個(gè)鏡像的實(shí)現(xiàn)方法
在使用 Docker 時(shí),經(jīng)常需要?jiǎng)h除不再需要的鏡像、容器和卷,以釋放存儲(chǔ)空間,本文主要介紹了Docker刪除某個(gè)鏡像的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02
如何在docker中運(yùn)行springboot項(xiàng)目過(guò)程圖解
這篇文章主要介紹了如何在docker中運(yùn)行springboot項(xiàng)目過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
使用Docker開發(fā)python Web 應(yīng)用
本文給大家詳細(xì)講解了如何使用Docker開發(fā)python應(yīng)用,特別是WEB應(yīng)用的步驟,Docker本質(zhì)上提供了非常輕量化的VMs,我們可以使用其創(chuàng)建一個(gè)高標(biāo)準(zhǔn)隔離并能大大減少失配的開發(fā)和產(chǎn)品環(huán)境。2016-10-10
docker上快速搭建gitlab、gitlab-runer及實(shí)現(xiàn)CI/CD功能
這篇文章主要介紹了docker上快速搭建gitlab、gitlab-runer及實(shí)現(xiàn)CI/CD,本文給大家講解的非常詳細(xì),包括docker上安裝gitlab的相關(guān)操作及配置root賬號(hào)密碼,需要的朋友可以參考下2022-04-04

