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

