目錄
🚀 Docker GPU Ollama + Codex Client 完整架構教學
這篇教學展示如何把 Ollama 部署在 GPU 機(Docker)上,並在 Windows 上用 netsh portproxy 將 localhost:11434 轉發到遠端 Ollama,使 Codex(Windows)像呼叫本機服務一樣使用遠端 GPU。文中補齊架構設定、修正常見 typo 與排除常見坑,方便直接貼上或發佈。
一、Server(GPU machine) — Docker Compose 建置 Ollama
推薦使用 docker compose 管理 Ollama container,範例:
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
- "11434:11434"
volumes:
- ./ollama_models:/root/.ollama
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all
healthcheck:
test: ["CMD", "ollama", "list"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
重點說明:
- volumes 的路徑不能寫成
./ollama_models:/root/.ollamaentrypoint script之類的 typo;正確為./ollama_models:/root/.ollama,用來存放模型與資料。 - 若使用 NVIDIA Container Toolkit,runtime: nvidia 與 NVIDIA_VISIBLE_DEVICES 會讓 container 可見 GPU。
- healthcheck 能幫助 docker 判斷服務是否就緒。
啟動:
docker compose up -d
啟動後可用以下指令確認 Ollama 能用 GPU 跑模型(以 gemma4:e4b 為例):
ollama run gemma4:e4b
或查看模型清單:
curl http://localhost:11434/v1/models
記得在 server firewall 開放 11434(或你設定的 port)。
二、Client(Windows) — Codex 設定
在 Windows 上的 Codex config 設為呼叫本地端(localhost),然後用 portproxy 把本地連線轉到遠端 GPU 機器。Codex 設定範例:
model = "gemma4:e4b"
model_provider = "ollama"
base_url = "http://localhost:11434"
sandbox = "elevated"
重要觀念:
- Codex 只連 localhost:避免 Ollama adapter 的 fallback bug、避免 remote IP 被忽略、也能讓 Codex 行為可預期。
- Windows 會把本地連線轉發到遠端 Ollama(portproxy),對 Codex 透明。
三、Client(Windows) — Aider 設定
同樣的 portproxy 架構也適用於 aider。只需讓 aider 指向 localhost:11434,portproxy 會自動轉發到遠端 GPU。
命令列方式:
aider --model ollama/gemma4:e4b --openai-api-base http://localhost:11434/v1
或在專案目錄建立 .aider.conf.yml 設定檔:
model: ollama/gemma4:e4b
openai-api-base: http://localhost:11434/v1
重點說明:
- aider 透過 OpenAI 相容介面與 Ollama 溝通,所以
--openai-api-base需加上/v1路徑。 - model 名稱格式為
ollama/<model_name>,讓 aider 知道使用 Ollama provider。 - 與 Codex 相同,aider 只連 localhost,portproxy 負責轉發,不需修改任何遠端設定。
四、Windows portproxy(關鍵步驟)
在 Windows 上以管理員權限開 PowerShell,新增 portproxy 規則:
netsh interface portproxy add v4tov4 `
listenaddress=127.0.0.1 `
listenport=11434 `
connectaddress=192.168.15.235 `
connectport=11434
把 192.168.15.235 換成你的 GPU server IP。
驗證:
netsh interface portproxy show all
會看到類似:
Listen on IPv4: Connect to IPv4:
Address Port Address Port
--------------- ---------- --------------- ----------
127.0.0.1 11434 192.168.15.235 11434
之後在 Windows 本機測試:
curl http://localhost:11434/v1/models
若可以返回模型清單,表示轉發成功且 Ollama API 回應正常。
五、常見問題與排查(必寫)
-
Codex 連 localhost 失敗或無回應
- 檢查 Windows IP Helper 服務是否啟用(portproxy 依賴 iphlpsvc):
Get-Service iphlpsvc - 確認防火牆沒有阻擋本機 loopback(通常不會),以及沒有其他服務占用 11434。
- 檢查 Windows IP Helper 服務是否啟用(portproxy 依賴 iphlpsvc):
-
portproxy 未生效
- 確認已新增規則:
netsh interface portproxy show all - 若有 IPv6 問題,可能需同時設定 v6tov4 規則或確保應用綁定 IPv4。
- 確認已新增規則:
-
GPU server 沒回應或 Ollama 無法啟動
- 確認 container 有 GPU 可見(nvidia-smi 在主機與 container 中檢查)
- 若需要讓 Ollama 綁定 0.0.0.0(外部可存取),可用:
OLLAMA_HOST=0.0.0.0 ollama serve - 檢查 Docker 日誌:
docker logs ollama
-
模型載入失敗或記憶體不足
- 使用較小模型或確認 GPU 記憶體(VRAM)是否足夠;必要時使用 swap、或多個小模型分流。
六、完整架構圖
flowchart TD
A[Codex on Windows] -->|"localhost:11434"| B[Windows portproxy]
D[Aider on Windows] -->|"localhost:11434"| B
B -->|"192.168.15.235:11434"| C["GPU Server: Ollama in Docker"]
七、核心價值(你要讓讀者知道)
這個流程在解決三個真實問題:
- GPU server 容易在 Linux 上穩定部署(Docker 化)
- Windows 客戶端(Codex)通常只願意連 localhost,使用 portproxy 能不改 Codex 的情況下使用遠端 GPU
- 避免額外建立反向代理或跳板伺服器,減少延遲與運維複雜度
參考資料
AI 只根據這篇文章內容回答。點下方任一問題,或直接開右下對話框。
相關標籤
相關文章
在本機跑 LLM 的五種工具:從 llama.cpp 到 vLLM
Qwen、Kimi、GLM 這些開源模型已經夠強,很多情境不再需要託管 API。本文整理五種在本機跑 LLM 的工具,以及各自適合的場景。
CPU、GPU、TPU 有什麼不同?為什麼同一個運算跑起來差這麼多
同一個運算在 CPU、GPU、TPU 上表現差很多,因為三種晶片針對的計算型態不同:CPU 追求彈性、GPU 追求平行吞吐量、TPU 專攻機器學習的張量運算。
Live English Tutor:用 LiveKit + Gemini Native Audio 打造即時語音 AI 英文家教
一套以即時語音為核心的 AI 英文家教系統:學生用麥克風(選配視訊/螢幕分享)跟 AI 老師 Emma 對話練習,系統即時糾錯並生成課後中文報告。技術核心是 LiveKit(Self-hosted WebRTC)+ Google Gemini 2.5 Flash Native Audio,後端 FastAPI 負責認證、課程與資料持久化。