Ollama Docker 教學:一行指令跑起來、模型存在哪、怎麼更新、compose 寫法和 GPU 設定

部分實測2026.10.15

想用 Docker 跑 Ollama,官方指令只有一行,但實際用會碰到幾個問題:映像檔多大、模型存在哪、更新會不會不見、n8n 和 Open WebUI 這些容器怎麼連進來、顯卡怎麼開。我在一台 4 核心、沒有顯卡的測試機上從頭跑一遍,包括更新、docker compose 和四種容器連線寫法,結果都附在文中。2026 年 10 月 15 日實測。

更新 2026/10/15・約 12 分鐘讀完・查證環境:Ollama 0.40.4 的官方 Docker 映像檔(ollama/ollama:latest,10 月 14 日版),Docker Engine 29.9.1、Compose 5.6.0,跑在 Vercel Sandbox 的雲端測試機(Ubuntu、4 核心、8 GB 記憶體、沒有顯卡)。只用 CPU 的安裝、下載模型、速度、更新、docker compose、容器之間的連線都實際跑過;NVIDIA、AMD 顯卡和 Mac、Windows 的 Docker Desktop 依官方文件

先講結論

  • 官方一行指令就能跑起來,我在 4 核心的測試機上連下載映像檔共 55 秒,再用 docker exec ollama ollama pull 下載模型。1B 的小模型每秒產生 14 到 16 個 token,跟直接安裝在同一個水準。
  • 代價是空間。映像檔下載 3.8 GB,我這台的硬碟多用了 8.9 GB,直接安裝只要 2.1 GB。進去看,裡面有 4.8 GB 是 NVIDIA 顯卡用的函式庫,沒有顯卡也會整包下載。
  • 模型存在 ollama 這個 volume 裡,刪掉容器、更新映像檔重建,模型都還在。改用 docker compose 要小心,預設的 volume 名稱會加上資料夾名稱,我第一次起來模型清單是空的。Mac 的 Docker 用不到顯卡,官方建議直接裝 App。
目錄
  1. 先想一下:要不要用 Docker
  2. 一行指令跑起來
  3. 下載模型、開始問
  4. 代價:硬碟多用了 8.9 GB
  5. 模型存在哪,更新會不會不見
  6. 用 docker compose
  7. 讓 n8n、Open WebUI 這些容器連得到
  8. 不要把 11434 直接開到網路上
  9. 有顯卡的話
  10. 不想用自己的電腦:放在雲端主機
  11. 這篇沒有測的

你已經用 Docker 跑了 n8n 或 Open WebUI,想把 Ollama 也放進 Docker 一起管;或是要裝在一台主機上,不想把東西直接裝進系統裡。官方給的指令只有一行,真的用起來會碰到幾個問題:映像檔多大、模型存在哪、更新會不會不見、別的容器怎麼連進來、顯卡怎麼開。

我開了一台 4 核心、8 GB 記憶體、沒有顯卡的雲端測試機,把官方的 Docker 映像檔從頭跑一遍,包括更新、docker compose、從別的容器連進來。顯卡的部分我的機器沒有,照官方文件寫,文中會標出來。

Ollama 本身是什麼、指令怎麼用,看 Ollama 教學;還沒裝 Docker 的話,先看 Docker 是什麼、怎麼裝。

先想一下:要不要用 Docker

用 Docker 跑的好處是跟其他容器一起管理,刪掉也乾淨,不會在系統裡留東西。缺點有兩個。第一是空間,官方映像檔讓我這台的硬碟多用了 8.9 GB,直接安裝只要 2.1 GB,原因在後面。第二是 Mac:官方 FAQ 寫明,Mac 的 Docker Desktop 沒辦法把顯卡交給容器,所以 GPU 加速用不了。

我的建議是:Mac 直接裝 Ollama 的 App;Windows 和 Linux,如果本來就用 Docker 跑其他服務,Ollama 也放進去很順;只是想在自己電腦上玩玩模型,直接安裝比較省空間。

一行指令跑起來

官方文件給的是這一行(只用 CPU 的版本):

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

幾個參數的意思:

參數 意思
-d 在背景跑
-v ollama:/root/.ollama 模型存到一個叫 ollama 的 volume,容器刪掉模型還在
-p 11434:11434 把容器的 11434 埠開到主機上,API 就在這裡
--name ollama 容器取名叫 ollama,之後的指令都用這個名字

在我的測試機上,這行連同第一次下載映像檔花了 55 秒,跑起來之後 1 秒內 API 就有回應,版本是 0.40.4。啟動紀錄裡可以看到它先找顯卡,找不到就改用 CPU,寫著 inference compute id=cpu library=cpu。

下載模型、開始問

容器跑起來之後,平常的 ollama 指令前面加上 docker exec ollama 就行,意思是在這個容器裡執行:

docker exec ollama ollama pull gemma3:1b-it-qat
docker exec -it ollama ollama run gemma3:1b-it-qat

第一行下載 1 GB 的 Gemma 3 1B,我這台花了 6 秒。第二行進入對話畫面,跟直接安裝的用法一樣。

不加 -it、把問題直接接在後面,問完就會結束。我讓它「用繁體中文一句話介紹台灣」,5 秒後回了「台灣是一個充滿活力和獨特的島嶼,以豐富的文化、美麗的自然風光和熱情的人民聞名。」,後面還多一句「希望這個回答對您有幫助!」。要注意的是,這樣輸出的開頭會夾著一串轉圈圈的符號(⠋⠙⠹ 這種),要存成檔案或給程式讀的話,改用 API 比較乾淨。

速度我用上一篇比較 LM Studio 時的同樣三題,從主機打 API、每題問兩次,每秒產生 14.2 到 16.5 個 token。上一篇在同規格的另一台機器上直接安裝 Ollama,是 15.8 到 18.2 個。兩台機器的處理器不一定一樣,我只能說在同一個水準,看不出 Docker 拖慢多少。記憶體整台用了 1,566 MB,直接安裝那次是 1,610 MB。

代價:硬碟多用了 8.9 GB

這是用 Docker 跑之前最該知道的事。Docker Hub 上 amd64 版的映像檔是 3.8 GB,下載完我這台的硬碟多用了 8.9 GB,docker images 顯示 9.36 GB。對照上一篇直接安裝 Ollama,整個程式只有 2.1 GB。

我進到容器裡看,/usr/lib/ollama 這個資料夾就有 4.8 GB,其中 2.7 GB 是 mlx_cuda_v13、1.3 GB 是 cuda_v12、816 MB 是 cuda_v13,都是給 NVIDIA 顯卡用的函式庫。沒有顯卡的機器也會整包下載。硬碟上的數字又比解開的檔案大,是因為我裝的 Docker 29 用 containerd 存映像檔(docker info 顯示 io.containerd.snapshotter.v1),壓縮檔和解開後的檔案都佔空間。

AMD 顯卡用的 rocm 版本,Docker Hub 上顯示是 1.45 GB。

模型存在哪,更新會不會不見

-v ollama:/root/.ollama 是把容器裡放模型的資料夾,存到一個叫 ollama 的 Docker volume。容器刪掉,volume 還在。我在主機上看,它在 /var/lib/docker/volumes/ollama/_data,下載一個模型之後是 958 MB。

更新就是拉新版映像檔、刪掉舊容器、用同一行指令重建:

docker pull ollama/ollama
docker rm -f ollama
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

我照這樣做,重建只花 2 秒,ollama list 裡的模型還在,不用重新下載。重點是第三行的 -v ollama: 要跟原本一模一樣,寫成別的名字,就會掛上一個空的 volume,看起來像模型全不見了。直接安裝(不是 Docker)的 Ollama 怎麼更新,在 Ollama 怎麼更新、看版本、改 port。

用 docker compose

比較多人會把設定寫成 compose.yaml,之後用 docker compose up -d 啟動。我用的是這份:

services:
  ollama:
    image: ollama/ollama
    container_name: ollama
    ports:
      - "127.0.0.1:11434:11434"
    volumes:
      - ollama:/root/.ollama
    restart: unless-stopped
volumes:
  ollama:

port 我寫成 127.0.0.1:11434:11434,只讓這台電腦自己連,理由在後面「不要把 11434 開到網路上」那一節。restart: unless-stopped 是主機重開機後自動跑起來。

這裡有一個坑,我實際踩到了。我先用 docker run 跑過、下載了模型,再改用 compose 起來,結果 ollama list 是空的。原因是 compose 會在 volume 名稱前面加上資料夾名稱:我的資料夾叫 myai,它就新建了一個 myai_ollama,沒有用原本那個 ollama。

要沿用原本的 volume,在最下面加一行 external: true:

volumes:
  ollama:
    external: true

改完重新 docker compose up -d,模型就都在了,docker port ollama 也顯示只開在 127.0.0.1:11434。如果你是第一次裝、還沒有模型,用前面那份就好,不需要加。compose 的更新方式是 docker compose pull 再 docker compose up -d,這兩行我這次沒有另外測。

讓 n8n、Open WebUI 這些容器連得到

這是最常卡住的地方。在別的容器裡打 localhost:11434 是連不到的,因為容器裡的 localhost 指的是它自己。我從另一個容器實測了四種寫法:

從另一個容器連 結果
http://localhost:11434 連不到(Failed to connect)
http://ollama:11434,沒放在同一個網路 找不到這個名稱(Could not resolve host)
http://ollama:11434,兩個容器在同一個網路 連得到
http://host.docker.internal:11434,加上 --add-host 連得到

同一個網路的做法是 docker network create ainet 建一個網路,docker network connect ainet ollama 把 Ollama 接上去,另一個容器啟動時加 --network ainet。如果兩個服務寫在同一份 compose 裡,compose 會自動把它們放在同一個網路,用服務名稱就連得到。

host.docker.internal 是從容器連回主機的名字。Linux 上要在另一個容器加 --add-host=host.docker.internal:host-gateway,Open WebUI 官方的安裝指令就是這樣寫的,細節在 Open WebUI 那篇。要注意,我測這條路的時候,Ollama 的 port 是開在所有網路介面上;如果照前面的 compose 只開給 127.0.0.1,這條路應該就不通了,改用同一個網路比較穩。

n8n 的 AI Agent 怎麼接 Ollama,在 n8n AI Agent 教學。Langflow 接 Ollama 還多一關:它預設會擋掉本機和內網位址,要另外設白名單,實測在 Langflow 教學。

不要把 11434 直接開到網路上

我看了官方映像檔的設定,裡面預設 OLLAMA_HOST=0.0.0.0:11434,再加上 -p 11434:11434,主機上所有網路介面都連得到。Ollama 的 API 沒有密碼。在雲端主機上照官方那行指令跑,等於任何知道 IP 的人都能用你的模型、佔你的資源。

Docker 官方文件還提醒一件事:用 -p 開出去的 port,流量會在經過 ufw 防火牆規則之前就被轉走,也就是說你在 ufw 擋了 11434,可能根本沒擋到。

放在主機上的話,把 -p 寫成 127.0.0.1:11434:11434,其他容器走內部網路連。真的要從外面連,前面加一層有驗證的反向代理。

有顯卡的話

這一節我的測試機沒有顯卡,照官方文件寫。

NVIDIA 顯卡要先在主機裝 NVIDIA Container Toolkit(官方文件有 apt 和 yum 的步驟),裝完設定 Docker 用它,再加 --gpus=all 啟動:

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Windows 要透過 WSL2,官方 FAQ 寫 Linux 和 Windows(WSL2)都能用 NVIDIA 顯卡加速。AMD 顯卡改用 rocm 版本:

docker run -d --device /dev/kfd --device /dev/dri -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama:rocm

官方文件另外寫,一般的 ollama/ollama 映像檔已經包含 Vulkan,容器拿得到顯卡裝置就會自動啟用。

沒有顯卡、或還沒裝 NVIDIA Container Toolkit 就加 --gpus=all 會怎樣,這個我測了:我這台的 Docker 29 直接拒絕啟動,錯誤訊息是 failed to discover GPU vendor from CDI: no known GPU vendor found。看到這行,就是 Docker 找不到可以用的顯卡。

有沒有真的用到顯卡,看 docker exec ollama ollama ps 的 PROCESSOR 欄。官方 FAQ 的說明是:100% GPU 是整個模型都在顯卡上,100% CPU 是完全沒用到顯卡(我這台就是這樣),兩個比例並列是一部分在顯卡、一部分在記憶體。

不想用自己的電腦:放在雲端主機

想讓 Ollama 一直開著給 n8n 這類自動化流程用,可以放在一台雲端主機上。Hostinger 有 Ollama 的一鍵安裝,頁面上寫有內建的 Docker 管理工具,最便宜的方案是 2 核心、8 GB 記憶體,10 月 15 日官網顯示首期每月 8.99 美元,續約每月 14.99 美元。這個範本我沒有用過。Ollama 要選 Hostinger 哪一級方案、續約價多少,我整理在 Hostinger 評價。

要先說清楚:這類主機都沒有顯卡,跑模型全靠 CPU。我這台 4 核心跑 1B 的模型每秒 14 到 16 個 token;換成 3B 到 4B 的模型,之前在 Ollama 模型推薦 測到的是每秒 6 到 10 個。2 核心的方案只會更慢。適合放小模型、做摘要和分類這類短任務,想跑大模型就不適合。各家主機的月費和續約價,在 VPS 推薦哪一家。

這篇沒有測的

NVIDIA、AMD 顯卡和 Vulkan;Mac 和 Windows 的 Docker Desktop;docker compose pull 的更新流程;反向代理和驗證;Hostinger 的 Ollama 範本;比 1B 更大的模型。

常見問題

Ollama 用 Docker 跑還是直接安裝比較好?

本來就用 Docker 跑 n8n、Open WebUI 這些服務,Ollama 也放 Docker 比較好管;只是想在自己電腦上玩模型,直接安裝比較省空間,我實測直接安裝佔 2.1 GB,Docker 映像檔讓硬碟多用了 8.9 GB。Mac 一定要直接安裝,因為 Mac 的 Docker Desktop 用不到顯卡。只用 CPU 的話,兩種跑起來速度差不多。

Docker 裡的 Ollama 怎麼用 GPU?

NVIDIA 顯卡要先在主機裝 NVIDIA Container Toolkit、設定 Docker 用它,啟動時加 --gpus=all;AMD 顯卡改用 ollama/ollama:rocm 這個版本,再加 --device /dev/kfd --device /dev/dri。有沒有真的用到顯卡,看 ollama ps 的 PROCESSOR 欄。沒有顯卡卻加 --gpus=all,我這台的 Docker 直接拒絕啟動。

n8n 或 Open WebUI 連不到 Docker 裡的 Ollama?

在別的容器裡打 localhost 是連不到的,容器裡的 localhost 是它自己。我實測可以的寫法有兩種:兩個容器放在同一個 Docker 網路,用 http://ollama:11434;或用 http://host.docker.internal:11434,Linux 上要在另一個容器加 --add-host=host.docker.internal:host-gateway。

Docker 裡的 Ollama 怎麼更新?模型會不見嗎?

docker pull ollama/ollama 拉新版,docker rm -f ollama 刪掉舊容器,再用原本那一行指令重新啟動。只要 -v 的 volume 名稱跟原本一樣,模型都還在。我實測重建只花 2 秒,模型清單沒有變。

這篇怎麼查證的

這篇只有一部分實際跑過,其餘依官方文件整理,查證日期 2026/10/15(Ollama 0.40.4 的官方 Docker 映像檔(ollama/ollama:latest,10 月 14 日版),Docker Engine 29.9.1、Compose 5.6.0,跑在 Vercel Sandbox 的雲端測試機(Ubuntu、4 核心、8 GB 記憶體、沒有顯卡)。只用 CPU 的安裝、下載模型、速度、更新、docker compose、容器之間的連線都實際跑過;NVIDIA、AMD 顯卡和 Mac、Windows 的 Docker Desktop 依官方文件)。哪些有跑、哪些沒跑,文中各段有寫。價格與方案以官方頁面為準,工具改版後內容可能過期。