免費Docker鏡像站失效?部署這款開源工具,自動優選最快節點

大家好,我是飄雷。

只要是玩NAS的兄弟,肯定都繞不開一個讓人極其頭疼的問題——Docker Hub在國內被大規模阻斷,拉取Docker鏡像時常會失敗。

談起這件事,是因爲前幾天我發佈了Easytier異地組網教程後,黑盒有兄弟在問怎麼解決拉取失敗的問題。

雖然我自己目前在用比較穩定的付費Docker鏡像站,但考慮到有不少兄弟還是傾向於使用免費資源,我就去研究了一下。

現在網上有不少帖子分享了免費的鏡像站地址,但問題在於,這些帖子裏的鏈接往往生存週期存疑,可能上個月還能用,現在就失效了。

如果每次拉取鏡像時,都要一遍遍去網上找新地址,然後挨個嘗試,這會白白浪費大量時間精力,屬實是太麻煩了。

那麼有沒有一勞永逸的辦法呢?

有的兄弟,有的。

今天飄雷就給大家分享一款GitHub上的實用開源項目——Docker-Hub-Proxy

簡單來說,它不是自己去給你做一個鏡像庫,而是一個聰明的Docker鏡像站導航與測速工具

https://github.com/xingfeng7788/docker-hub-proxy

Docker-Hub-Proxy的核心作用有三個:

  1. 彙總統計全網公開的鏡像站資源。

  2. 自動對這些鏡像站進行連通性測速。

  3. 幫你篩選出延遲最低、當前絕對可用的節點,讓你直接複製去拉取鏡像。

廢話不多說,因爲原項目代碼有些陳舊,在最新環境部署會報錯,所以今天我會手把手教大家如何修改代碼,並在NAS上完美部署

部署流程

這裏我們來展示如何在威聯通NAS上使用Docker形式部署Docker-Hub-Proxy,用到的設備是威聯通最新的6盤位旗艦型號Qu805。

1.下載項目文件

和之前使用Docker Compose代碼的常規部署方式不同,這次因爲我們需要修改源碼,所以首先要前往 GitHub 下載打包後的項目文件 ZIP 壓縮包。

解壓縮後得到docker-hub-proxy-master文件夾:

2.修改docker-compose.yaml文件

首先使用Notepad++或VS Code之類的代碼編輯器,打開文件夾中的docker-compose.yaml文件,根據自己NAS的實際情況,修改爲代碼中的映射端口號和NAS的實際路徑,參考如下:

services:

docker-hub-proxy:

build: .

container_name: docker-hub-proxy

ports:

# 冒號左邊修改爲未被佔用的隨意端口號,右側8000不要變動

- "8765:8000"

volumes:

# 冒號左邊修改爲你NAS的絕對路徑

- /share/Container/dockerhubproxy/data:/app/data

restart: unless-stopped

在這段代碼中,因爲我的Qu805的8000端口號被其他Docker佔用了,所以這裏我隨意將其映射成了8765端口,另外用於保存這個項目數據庫的絕對路徑設置爲/share/Container/dockerhubproxy/data。

3.修改web_ui.py文件

我自己實測,在修改docker-compose.yaml文件,部署後無法正常訪問項目的WEB UI管理界面。

猜測可能是因爲該項目編寫時使用的FastAPI/Starlette庫版本較早,現在通過Dockerfile構建時,會自動拉取最新版的庫。而在最新版中,TemplateResponse 的調用語法發生了變化,如果不改代碼,容器運行後處理網頁模板時直接就會崩潰。

這裏我們打開docker-hub-proxy-master\app\routers文件夾下的web_ui.py文件,找到第 25 行左右。

修改前的舊代碼:

return templates.TemplateResponse("index.html", {

"request": request,

"proxies": [p.model_dump(mode='json') for p in proxies],

"stats": [s.model_dump(mode='json') for s in stats],

"total_download": total_download,

"pull_count": pull_count,

"pull_history": [p.model_dump(mode='json') for p in pull_history]

})

我們將其修改爲支持新版本庫的代碼:

return templates.TemplateResponse(

request=request,

name="index.html",

context={

"proxies": [p.model_dump(mode='json') for p in proxies],

"stats": [s.model_dump(mode='json') for s in stats],

"total_download": total_download,

"pull_count": pull_count,

"pull_history": [p.model_dump(mode='json') for p in pull_history]

}

)

4.上傳並構建部署Docker

將修改好代碼的整個文件夾裏的文件,全部上傳到你的NAS中,比如我就上傳到了/share/Container/dockerhubproxy,再在這個文件夾下新建一個data文件夾:

然後開啓NAS的SSH功能,使用 Putty 或 FinalShell 登錄進NAS後臺。

cd進入我們剛纔上傳的目錄:

cd /share/Container/dockerhubproxy

運行構建並啓動容器的命令(注意,因爲要現場構建鏡像,所以必須帶上 --build 參數,這個過程可能需要幾分鐘,請耐心等待):

sudo docker compose up -d --build

出現下述字樣時,說明項目已經部署成功了:

✔ Network dockerhubproxy_default Created

✔ Container docker-hub-proxy Started

使用方法與配置

1.WEB UI管理設置

部署完成後,在瀏覽器輸入 http://<NAS的IP>:8765(例如 http://192.168.10.70:8765),就能看到 Docker 鏡像加速的 UI 界面了。

項目原本設計了搜索Docker 鏡像的功能,項目作者給出的效果是這樣的:

但不知爲何在我這邊無法正常工作,不過這並不影響我們拉取鏡像的核心需求。

另外,作者原本設計了從特定 URL來自動抓取全網可用的Docker加速節點:

https://status.anye.xyz/status.json

但可能因爲反爬蟲或網站改版,自動抓取功能目前也失效了。

不過這倒是影響不大,我們自己用瀏覽器打開這個網站,就能看到彙總後的各公共鏡像站節點信息:

通過手動添加代理節點的方式同樣可以實現彙總,無非就是前期操作稍微麻煩一點兒:

多次添加後,你的列表裏就會擁有一個代理池。點擊列表上方的「測速」按鈕,程序就會自動測試NAS與各個加速節點之間的連通延遲,並且在後續我們使用時,Docker-Hub-Proxy會首選延遲最低的節點鏈接,爲我們實現鏡像代理功能。

這裏需要提醒大家的是,加速節點延遲低,並不一定代表實際拉取的速度快啊,如果測出來延遲最低的那個站點實際下載很慢,可以把它臨時刪掉,換延遲第二低的節點測試實際效果。

2.Container Station添加自定義存儲庫

接下來,我們打開威聯通的 Container Station,依次點擊左側的「存儲庫」 -> 「添加存儲庫」:

  • 提供商:選擇「其他」

  • 名稱:隨便起(比如 Local_Turbo)

  • URL:填寫剛纔本機IP+前面我們自定義的端口號(如 http://127.0.0.1:8765)

  • 點擊應用。

爲了驗證咱們搭建的加速節點是不是真的好使,咱們直接通過NAS的SSH命令行來一次測試。

如下圖所示,在拉取鏡像時,我們只需要在原本的鏡像名字前面,加上咱們NAS的局域網IP和端口號(例如我的就是 192.168.10.70:8765/),敲下回車後,看到這一排排絲滑的 Pull complete:

然後我們在Container Station中提取映像時,也可以在下拉菜單裏選擇剛纔添加的存儲庫,同樣能夠正常拉取:

如果回到WEB UI界面,還可以統計拉取次數、流量歷史,以及拉取過的文件等信息:

總結

以上就是本期的全部內容了,感謝大家看到這裏。

總的來說,對於被拉取Docker鏡像難住,又不想使用付費方案的NAS玩家來說,Docker-Hub-Proxy非常好用,再也不用在各大論壇苦苦求鏡像地址了。

只要在後臺添加一批公共代理節點,以後咱們拉取鏡像時,只需要在鏡像名前面加上NAS的局域網IP+端口號就行了,Docker-Hub-Proxy會在後臺自動幫我們把請求轉發給當前速延遲最低的那個外部節點,實現真正的一勞永逸。

它就像是一個私人定製的鏡像站測速探針,雖然不能直接提供代理功能,但能幫我們系統化地管理、篩選網絡上那些網絡質量良莠不齊的公開鏡像站,讓我們每次拉取鏡像前都能心中有數。

在寫作本文過程中,整理代碼報錯、跑通流程都不易,如果這篇教程對你有所幫助,強烈建議先點個收藏,以防以後需要找可用節點時找不到路,也歡迎大家在評論區互相分享當前還可以使用的節點URL。

更多遊戲資訊請關註:電玩幫遊戲資訊專區

電玩幫圖文攻略 www.vgover.com