Docker無法連接到Docker?Hub和鏡像加速器的問題詳解
前言
今天遇到一個(gè)比較常見的問題,雖然嘗試了很多辦法仍然沒有解決(因?yàn)橥ㄟ^咨詢問題出在云主機(jī)那邊,只能等那邊解決),但是總結(jié)出了涉及多個(gè)方面,包括 DNS 配置、網(wǎng)絡(luò)連通性、防火墻設(shè)置等所有步驟和測(cè)試方案。
問題描述
當(dāng)我們嘗試?yán)?nbsp;alpine
鏡像時(shí),收到如下錯(cuò)誤信息:
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)
同時(shí),使用 curl
測(cè)試直接訪問 Docker Hub 的 HTTPS 端點(diǎn)也失敗了:
curl -v https://registry-1.docker.io/v2/
輸出顯示 Connection refused
和 Network is unreachable
錯(cuò)誤。
診斷過程
1. 檢查 DNS 配置
首先,檢查當(dāng)前配置的 DNS 服務(wù)器是否能夠解析所需的域名。使用 nslookup
命令測(cè)試:
nslookup registry-1.docker.io
結(jié)果表明:當(dāng)前配置的 DNS 服務(wù)器無法解析部分國內(nèi)鏡像加速器的域名,但可以解析 registry-1.docker.io
。
2. 更換 DNS 服務(wù)器
修改系統(tǒng)的 DNS 設(shè)置可以幫助解決由于 DNS 解析問題導(dǎo)致的網(wǎng)絡(luò)連接問題。在 Linux 系統(tǒng)上,你可以通過修改 /etc/resolv.conf
文件來更改 DNS 服務(wù)器地址。然而,在許多現(xiàn)代 Linux 發(fā)行版中,直接編輯 /etc/resolv.conf
可能不會(huì)生效,因?yàn)樵撐募赡苡上到y(tǒng)服務(wù)(如 NetworkManager
或 systemd-resolved
)管理。
以下是幾種常見的修改 DNS 設(shè)置的方法:
方法 1:直接編輯 /etc/resolv.conf
這種方法適用于那些不使用 NetworkManager
或 systemd-resolved
的系統(tǒng)。請(qǐng)注意,如果你的系統(tǒng)使用這些服務(wù),直接編輯 /etc/resolv.conf
可能會(huì)在重啟后被覆蓋。
使用文本編輯器打開
/etc/resolv.conf
文件:sudo nano /etc/resolv.conf
添加或修改 DNS 服務(wù)器地址。例如,添加 Google 的公共 DNS 服務(wù)器:
nameserver 8.8.8.8 nameserver 8.8.4.4
保存并關(guān)閉文件。
方法 2:通過 NetworkManager 修改
如果系統(tǒng)使用 NetworkManager
,可以通過以下步驟修改 DNS 設(shè)置:
打開終端并列出所有網(wǎng)絡(luò)接口:
nmcli device show
找到你要配置的網(wǎng)絡(luò)接口名稱(例如
eth0
),然后使用以下命令設(shè)置 DNS:sudo nmcli con modify "你的連接名稱" ipv4.dns "8.8.8.8 8.8.4.4" sudo nmcli con modify "你的連接名稱" ipv4.ignore-auto-dns yes sudo nmcli con up "你的連接名稱"
其中
"你的連接名稱"
是你從nmcli connection show
命令輸出中找到的網(wǎng)絡(luò)連接名稱。
方法 3:通過 systemd-resolved 修改
如果系統(tǒng)使用 systemd-resolved
,可以通過編輯 /etc/systemd/resolved.conf
文件來設(shè)置全局 DNS:
編輯
/etc/systemd/resolved.conf
文件:sudo nano /etc/systemd/resolved.conf
找到
[Resolve]
部分,并添加或修改以下行:[Resolve] DNS=8.8.8.8 8.8.4.4
保存并關(guān)閉文件。
重啟
systemd-resolved
服務(wù)以應(yīng)用更改:sudo systemctl restart systemd-resolved
如果你的系統(tǒng)仍然使用
/etc/resolv.conf
,你可能需要將其鏈接到systemd-resolved
提供的 stub 文件:sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
方法 4:對(duì)于 Docker 守護(hù)進(jìn)程單獨(dú)設(shè)置 DNS
如果你想只為 Docker 容器設(shè)置 DNS 服務(wù)器,可以在 Docker 的配置文件 /etc/docker/daemon.json
中進(jìn)行配置:
編輯或創(chuàng)建
/etc/docker/daemon.json
文件:sudo nano /etc/docker/daemon.json
添加或修改以下內(nèi)容:
{ "dns": ["8.8.8.8", "8.8.4.4"] }
保存并關(guān)閉文件。
重新加載 Docker 守護(hù)進(jìn)程以應(yīng)用更改:
sudo systemctl daemon-reload sudo systemctl restart docker
通過以上方法之一,你應(yīng)該能夠成功地修改系統(tǒng)的 DNS 設(shè)置。選擇最適合你系統(tǒng)配置的方法進(jìn)行操作即可
3. 測(cè)試新的 DNS 配置
確認(rèn)新的 DNS 配置是否生效,并且能夠解析所需的域名:
nslookup registry-1.docker.io
如果這些命令返回有效的 IP 地址,則說明 DNS 配置正確。使用解析出來的 IP 地址進(jìn)行測(cè)試:
curl -v https://<IP_ADDRESS>:443/v2/
如果直接使用 IP 地址仍然無法連接,可能是目標(biāo)服務(wù)器對(duì)某些 IP 范圍有訪問限制,或者該服務(wù)暫時(shí)不可用。
4. 再檢查網(wǎng)絡(luò)連通性
使用 telnet
或 nc
命令測(cè)試端口連通性:
telnet registry-1.docker.io 443 # 或者 nc -zv registry-1.docker.io 443
如果這些命令顯示無法連接或超時(shí),可能是因?yàn)榉阑饓蚱渌W(wǎng)絡(luò)安全設(shè)置阻止了出站 HTTPS 請(qǐng)求,而不僅僅是與 Docker Hub 的連接問題。
5. 使用阿里云鏡像加速器
如果 DNS 和基本網(wǎng)絡(luò)連通性都沒有問題,但仍無法通過 Docker Hub 下載鏡像,建議直接使用阿里云的鏡像加速器來拉取鏡像:
docker pull registry.cn-hangzhou.aliyuncs.com/library/alpine:latest
6. 檢查防火墻和安全組規(guī)則
最后,確保主機(jī)上的防火墻規(guī)則以及云服務(wù)提供商的安全組設(shè)置允許出站 HTTPS 流量(端口 443)。查看主機(jī)上的 iptables 規(guī)則:
sudo iptables -L -n | grep 443
同時(shí),登錄到云控制臺(tái),檢查與你的實(shí)例相關(guān)聯(lián)的安全組規(guī)則,確保允許出站 HTTPS 流量。
總結(jié)
通過逐步排查 DNS 配置、網(wǎng)絡(luò)連通性和防火墻設(shè)置,可以排除一些 Docker 容器無法連接到 Docker Hub 或鏡像加速器的問題。以下是關(guān)鍵步驟:
- 檢查并更換 DNS 服務(wù)器:確保能夠解析所有必要的域名。
- 測(cè)試網(wǎng)絡(luò)連通性:確認(rèn)可以建立到 Docker Hub 的 HTTPS 連接。
- 使用鏡像加速器:嘗試使用國內(nèi)的鏡像加速器下載鏡像。
- 檢查防火墻和安全組規(guī)則:確保沒有阻止出站 HTTPS 請(qǐng)求。
到此這篇關(guān)于Docker無法連接到Docker Hub和鏡像加速器的問題詳解的文章就介紹到這了,更多相關(guān)Docker無法連接Docker Hub和鏡像加速器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker創(chuàng)建mongodb容器存儲(chǔ)數(shù)據(jù)步驟詳解
這篇文章主要為大家介紹了docker創(chuàng)建mongodb容器存儲(chǔ)數(shù)據(jù)步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10docker部署蝸牛影院系統(tǒng)詳細(xì)流程分析
這篇文章給大家介紹docker部署蝸牛影院系統(tǒng),在部署項(xiàng)目時(shí)系統(tǒng)硬件配置是CPU2核以上,內(nèi)存8G,詳細(xì)給大家介紹了安裝流程,對(duì)docker部署蝸牛電影院系統(tǒng)感興趣的朋友跟隨小編一起看看吧2021-05-05優(yōu)化Docker鏡像安全性的12個(gè)技巧總結(jié)
docker是虛擬化容器技術(shù),有三個(gè)主要概念,鏡像(類)、容器(對(duì)象)、倉庫,docker就是類似VM虛擬機(jī)一樣的虛擬技術(shù),體積小,運(yùn)行速度快,下面這篇文章主要給大家介紹了關(guān)于優(yōu)化Docker鏡像安全性的12個(gè)技巧,需要的朋友可以參考下2022-03-03解決運(yùn)行Docker鏡像報(bào)錯(cuò):version `GLIBC_2.32‘ not found
文章介紹了解決Docker鏡像運(yùn)行時(shí)因GLIBC版本不匹配導(dǎo)致的錯(cuò)誤,建議使用AlpineLinux作為基礎(chǔ)鏡像,并在其中安裝所需的運(yùn)行時(shí)庫,作者還分享了個(gè)人經(jīng)驗(yàn),提醒讀者嘗試其他方法無效后可以尋求幫助2024-12-12Docker-Compose搭建Redis集群的實(shí)現(xiàn)教程
本文主要介紹了Docker-Compose搭建Redis集群的實(shí)現(xiàn)教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03docker自定義網(wǎng)橋docker0及docker的開啟,關(guān)閉,重啟命令操作
這篇文章主要介紹了docker自定義網(wǎng)橋docker0及docker的開啟,關(guān)閉,重啟命令操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03