大家好,我是飄雷。
只要是玩NAS的兄弟,肯定都繞不開一個讓人極其頭疼的問題——Docker Hub在國內被大規模阻斷,拉取Docker鏡像時常會失敗。
談起這件事,是因爲前幾天我發佈了Easytier異地組網教程後,黑盒有兄弟在問怎麼解決拉取失敗的問題。

雖然我自己目前在用比較穩定的付費Docker鏡像站,但考慮到有不少兄弟還是傾向於使用免費資源,我就去研究了一下。
現在網上有不少帖子分享了免費的鏡像站地址,但問題在於,這些帖子裏的鏈接往往生存週期存疑,可能上個月還能用,現在就失效了。
如果每次拉取鏡像時,都要一遍遍去網上找新地址,然後挨個嘗試,這會白白浪費大量時間精力,屬實是太麻煩了。
那麼有沒有一勞永逸的辦法呢?
有的兄弟,有的。
今天飄雷就給大家分享一款GitHub上的實用開源項目——Docker-Hub-Proxy。
簡單來說,它不是自己去給你做一個鏡像庫,而是一個聰明的Docker鏡像站導航與測速工具。
https://github.com/xingfeng7788/docker-hub-proxy
![]()
Docker-Hub-Proxy的核心作用有三個:
彙總統計全網公開的鏡像站資源。
自動對這些鏡像站進行連通性測速。
幫你篩選出延遲最低、當前絕對可用的節點,讓你直接複製去拉取鏡像。
![]()
廢話不多說,因爲原項目代碼有些陳舊,在最新環境部署會報錯,所以今天我會手把手教大家如何修改代碼,並在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
