你剛買了一台 Synology NAS,聽說可以跑 Docker 裝一堆自架服務,但打開 DSM 找了半天——Docker 在哪?
答案是:DSM 7.2 之後,Docker 已經被升級成 Container Manager。它是一套完整的圖形化 Docker 管理介面,不用記指令、不用開 SSH,直接在網頁上就能拉映像、建容器、貼 Compose 一鍵啟動服務。
這篇從零開始,帶你走完 Container Manager 的所有核心操作,包括很多人忽略的網路設定和資源限制。
🎯 這篇適合誰
| 你的情況 | 建議閱讀段落 |
|---|---|
| 完全不知道 Docker 是什麼 | 從「核心概念」開始 |
| 知道 Docker,但沒在 NAS 上用過 | 跳到「安裝 Container Manager」 |
| 裝好了,想建第一個容器 | 跳到「拉取映像檔」 |
| 想用 Compose 部署多容器服務 | 跳到「Compose 部署」 |
| 容器跑起來但網路不通 | 看「網路設定」 |
| 想限制容器吃多少資源 | 看「資源限制」 |
🔄 Container Manager vs 舊版 Docker 套件
DSM 7.2 是一個分水嶺。Synology 在這版把「Docker」套件正式改名為 Container Manager,同時帶來幾個實質升級:
| 項目 | 舊版 Docker 套件 | Container Manager(DSM 7.2+) |
|---|---|---|
| 套件名稱 | Docker | Container Manager |
| Compose 支援 | 無(需 SSH 手動執行) | 內建 Compose 專案管理 |
| 容器管理介面 | 基本 | 改版,資訊更完整 |
| 映像搜尋 | 有 | 有,介面更新 |
| 記憶體 / CPU 監控 | 簡單 | 每容器即時圖表 |
| 多容器專案管理 | 無 | 支援 Compose 專案群組 |
| 資源限制 | SSH 設定 | GUI 可設定 CPU / 記憶體上限 |
最重要的差異是 Compose 支援。以前你要在 SSH 裡用 docker-compose up -d 才能啟動多容器服務,現在直接在網頁介面貼上 YAML 就能完成,大幅降低門檻。
如果你的 DSM 還是 7.1 或更舊,強烈建議先升級到 7.2+。Container Manager 的 Compose 功能會讓你的 Docker 管理體驗完全不同。
📦 核心概念快速理解
在開始操作之前,先把幾個關鍵詞搞清楚。搞懂這些,之後看介面會順很多。
| 術語 | 白話解釋 | 類比 |
|---|---|---|
| 映像(Image) | 一個應用程式的「安裝包」,唯讀 | 軟體的光碟片 |
| 容器(Container) | 從映像啟動的「執行中實體」,可讀寫 | 把光碟裝進去跑起來的程式 |
| Volume | 掛載到容器裡的持久化儲存空間 | 給程式的專用資料夾 |
| 網路(Network) | 容器之間互相溝通的方式 | 容器的內部區域網路 |
| Port 映射 | 把 NAS 的某個 Port 轉進容器內的 Port | 大門的分機轉接到辦公室 |
| Compose | 用一個 YAML 檔定義多個容器的組合 | 一份菜單同時點好幾道菜 |
一個最重要的觀念
容器本身是暫時的。 你刪掉容器,裡面沒有掛載 Volume 的資料會全部消失。
所以任何要保留的資料——設定檔、資料庫、上傳的檔案——都必須透過 Volume 掛載到 NAS 的實體路徑上。這是新手最常犯的錯誤,後面會詳細說明。
想更深入了解 Docker 的概念,可以看 Docker 是什麼?NAS 新手入門完整解說。
📥 安裝 Container Manager
硬體需求
Container Manager 需要 DSM 7.2 或更新版本,而且只有搭載 x86_64 或 ARMv8 處理器的機型才支援。
支援的主要系列:
- Plus 系列:DS925+、DS923+、DS723+、DS1522+、DS1525+ 等
- XS/XS+ 系列:DS1823xs+ 等企業機型
- DVA 系列:DVA1622、DVA3221 等(含 AI 功能)
不支援的機型:使用 Realtek RTD1619B 等 ARMv7 處理器的入門機種(如舊款 DS220j)無法安裝 Container Manager。購買前請先到 Synology 官網的套件相容性頁面 確認。
安裝步驟
- 登入 DSM,開啟套件中心
- 搜尋欄輸入「Container Manager」
- 點擊安裝,確認授權條款
- 安裝完成後,在應用程式選單找到 Container Manager 圖示
- 首次開啟時,系統會引導你選擇 Docker 資料存放位置
Docker 資料存放位置
這個選擇會影響所有容器的效能:
| 位置 | 效能 | 適合 |
|---|---|---|
| HDD Volume | 一般 | 資料量大但不要求速度的服務 |
| NVMe Volume | 最快 | 資料庫、頻繁讀寫的服務 |
| SHR/RAID Volume | 有保護 | 重要資料的服務 |
如果你的 NAS 有 NVMe SSD,強烈建議把 Docker 資料放在 NVMe Volume 上。容器啟動速度和資料庫查詢效能會有明顯提升。詳細做法可以看 把 Docker 資料搬到 NVMe SSD。
🖼️ 拉取映像檔
映像是一切的起點。Container Manager 提供 Registry 搜尋介面,不用記 docker pull 指令。
操作步驟
- 開啟 Container Manager → 左側選單點映像
- 右上角點新增 → 從 Docker Hub 新增
- 搜尋欄輸入映像名稱(例如
nginx、uptime-kuma) - 從結果列表選擇映像
- 選擇 Tag(版本標籤)
- 點套用開始下載
選映像的原則
| 來源 | 辨識方式 | 說明 |
|---|---|---|
| Docker 官方 | 有「Docker Official Image」標章 | 品質最高,但功能較精簡 |
| linuxserver.io | linuxserver/ 開頭 |
社群維護品質好,文件詳細 |
| 作者發佈 | 作者名/映像名 |
看 Docker Hub 的星數和更新頻率 |
Tag 選擇策略
| Tag | 適合 | 風險 |
|---|---|---|
latest |
快速測試 | 版本不固定,更新後可能壞掉 |
指定版本(1.23.4) |
正式使用 | 需手動追蹤新版 |
大版本(1) |
平衡 | 自動更新小版本,大版本不變 |
建議:正式跑的服務用指定大版本號(例如
louislam/uptime-kuma:1),兼顧穩定和自動安全更新。
🚀 建立容器
映像下載好了,選中映像 → 點執行,進入容器建立精靈。
Port 映射
Port 映射的邏輯是:NAS Port → 容器 Port。
| 設定欄位 | 說明 | 範例 |
|---|---|---|
| 本機連接埠 | NAS 上你想開放的 Port | 8080 |
| 容器連接埠 | 映像文件裡指定的 Port | 80 |
設定後,用 http://NAS-IP:8080 就能連到容器裡的 Port 80 服務。
避開這些 Port:
| Port | 用途 | 不要佔用 |
|---|---|---|
| 5000 | DSM HTTP | ✅ |
| 5001 | DSM HTTPS | ✅ |
| 80 / 443 | Web Station | 看情況 |
| 6690 | Synology Drive | ✅ |
技巧:我習慣用 8000 開頭的 Port 給自架服務——8001、8002、8003 依序排下去,好記又不容易衝突。
Volume 掛載(最重要的步驟)
再說一次:沒設 Volume = 資料會消失。 這是新手最常踩的坑。
推薦的路徑命名慣例:
/volume1/docker/[應用名稱]/
├── config/ ← 設定檔
├── data/ ← 資料庫或資料
└── logs/ ← 記錄(可選)
在 Container Manager 的 Volume 設定:
| 設定欄位 | 填寫內容 | 說明 |
|---|---|---|
| 主機資料夾 | /volume1/docker/uptime-kuma/data |
NAS 上的實體路徑 |
| 掛載路徑 | /app/data |
容器內的路徑(看映像文件) |
| 類型 | 讀/寫 | 通常選讀/寫 |
重要:在設定 Volume 之前,先用 File Station 把資料夾建好,確保路徑存在。如果路徑不存在,容器啟動會失敗或自動建立一個 root 權限的資料夾。
環境變數
很多映像透過環境變數控制行為:
| 變數名稱 | 值 | 用途 |
|---|---|---|
TZ |
Asia/Taipei |
設定容器時區 |
PUID |
1026(你的 UID) |
指定檔案擁有者 |
PGID |
100(users 群組) |
指定群組 |
取得你的 PUID / PGID:
# SSH 進 NAS 後執行
id 你的使用者名稱
# 輸出:uid=1026(daniel) gid=100(users) ...
為什麼要設 PUID/PGID? 如果不設,容器內的程式會用 root 權限寫檔案,你在 File Station 裡可能會遇到權限錯誤。設了之後,容器寫出來的檔案跟你的 DSM 帳號同權限。
重新啟動原則
| 選項 | 行為 | 適合 |
|---|---|---|
| 不自動重新啟動 | 停止後不重啟 | 測試用容器 |
| 發生錯誤時重新啟動 | 崩潰才重啟 | 一般服務 |
| 永遠重新啟動 | 任何停止都重啟 | 高可用服務 |
| 除非手動停止 | 類似永遠,但你主動停止不重啟 | 建議選這個 |
長期運行的服務選「除非手動停止」(unless-stopped),NAS 重開機後容器會自動恢復。
📋 Compose 部署:一個 YAML 搞定多容器
如果映像文件提供了 docker-compose.yaml,用 Compose 部署是最省事的方式。比起一個一個建容器,Compose 的優勢:
- 一個檔案定義所有設定:Port、Volume、環境變數、網路全部寫在一起
- 一鍵啟動 / 停止整組服務:不用逐個容器操作
- 版本控制:YAML 檔可以存起來,下次部署直接貼上
- 多容器互連:Compose 自動建立內部網路,容器之間用名稱互通
操作步驟
- Container Manager 左側選單 → 專案
- 點新增 → 輸入專案名稱(例如
uptime-kuma) - 選擇專案路徑(建議對應
/volume1/docker/uptime-kuma) - 在 YAML 編輯區貼上內容
- 點下一步預覽 → 完成
Container Manager 會自動執行 docker compose up -d。
貼上前可用 Docker Compose 產生器 / 檢查器 確認語法正確,一個拼字錯誤就會啟動失敗。
範例一:Uptime Kuma(服務監控)
監控你所有自架服務的狀態,掛了立刻通知。
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- /volume1/docker/uptime-kuma/data:/app/data
environment:
- TZ=Asia/Taipei
部署後用 http://NAS-IP:3001 開啟。詳細設定可以看 Uptime Kuma 完整教學。
範例二:Nginx Proxy Manager(反向代理)
讓你用網域名稱存取服務,不用記一堆 Port 號。
services:
nginx-proxy-manager:
image: jc21/nginx-proxy-manager:latest
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "81:81"
volumes:
- /volume1/docker/npm/data:/data
- /volume1/docker/npm/letsencrypt:/etc/letsencrypt
environment:
- TZ=Asia/Taipei
Port 81 是管理介面。詳細設定可以看 Nginx Proxy Manager 完整教學。
範例三:多容器組合(WordPress + MySQL)
Compose 最強大的場景——一個 YAML 同時啟動多個互相依賴的容器:
services:
wordpress:
image: wordpress:latest
container_name: wordpress
restart: unless-stopped
ports:
- "8080:80"
volumes:
- /volume1/docker/wordpress/html:/var/www/html
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wp_user
- WORDPRESS_DB_PASSWORD=your_secure_password
- WORDPRESS_DB_NAME=wordpress
depends_on:
- db
db:
image: mysql:8.0
container_name: wordpress-db
restart: unless-stopped
volumes:
- /volume1/docker/wordpress/db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root_secure_password
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wp_user
- MYSQL_PASSWORD=your_secure_password
- TZ=Asia/Taipei
注意 WORDPRESS_DB_HOST=db 這行——Compose 會自動建立內部網路,WordPress 容器可以用 db 這個名稱找到 MySQL 容器,不需要知道 IP。
Compose 專案的日常管理
在 Container Manager 的「專案」頁面:
- 停止 / 啟動:一次控制所有容器
- 即時記錄:查看啟動是否成功
- 編輯:修改 YAML → 存檔 → 重新部署
- 清除:停止並刪除所有容器(Volume 資料保留)
🌐 網路設定
Container Manager 的網路設定是很多人忽略的部分,但搞不好就會遇到「容器之間連不到」或「外面連不進來」的問題。
三種網路模式
| 模式 | 說明 | 適合 |
|---|---|---|
| bridge(預設) | 容器有獨立 IP,透過 Port 映射對外 | 大部分情況 |
| host | 容器直接用 NAS 的網路,不需要 Port 映射 | 效能敏感、需要大量 Port |
| macvlan | 容器拿到獨立的區域網路 IP | 需要被其他裝置直接存取 |
大部分情況用 bridge 就好。 如果你需要容器在區域網路上有自己的 IP(例如跑 Pi-hole 或 AdGuard Home),才需要 macvlan。
Bridge 模式的運作邏輯
區域網路 (192.168.1.x)
│
├── NAS (192.168.1.100)
│ ├── Port 8001 → 容器 A (Port 80)
│ ├── Port 8002 → 容器 B (Port 80)
│ └── Port 3001 → 容器 C (Port 3001)
│
└── 其他裝置
每個容器在 Docker 的內部網路有自己的 IP(172.17.x.x),但外部看不到。外部存取靠 NAS 的 Port 映射轉進去。
容器之間互相存取
同一個 Compose 專案的容器自動在同一個網路裡,可以用容器名稱互相存取:
# WordPress 連 MySQL,用 "db" 這個名稱就好
WORDPRESS_DB_HOST=db
不同 Compose 專案的容器預設互相看不到。如果需要互通,可以建立共用網路:
# 在 docker-compose.yaml 最後加:
networks:
shared:
external: true
# 然後在需要互通的服務加上:
services:
app:
networks:
- shared
在 Container Manager → 網路 → 新增一個名為 shared 的 bridge 網路。
📊 資源限制
NAS 的 CPU 和 RAM 有限,如果某個容器吃太多資源,會拖慢整台 NAS。建議對每個容器設定資源上限。
在 Container Manager 設定
容器設定 → 進階設定 → 可以設定:
| 項目 | 建議值 | 說明 |
|---|---|---|
| CPU 優先權 | 中 | 除非是核心服務,否則不要設高 |
| 記憶體上限 | 依服務調整 | 防止記憶體洩漏拖垮整台 NAS |
各服務建議記憶體上限
| 服務 | 建議上限 | 說明 |
|---|---|---|
| Nginx Proxy Manager | 256 MB | 很輕量 |
| Uptime Kuma | 256 MB | 監控多個端點時會稍多 |
| Vaultwarden | 128 MB | 非常輕量 |
| AdGuard Home | 256 MB | DNS 查詢量大時會多 |
| Jellyfin | 2-4 GB | 轉碼時吃很多 |
| Immich | 2-4 GB | 機器學習辨識時吃很多 |
| Home Assistant | 512 MB - 1 GB | 外掛多時會增加 |
注意:記憶體上限設太低會讓容器被 OOM Kill(被系統強制關閉)。如果容器一直莫名重啟,檢查是不是記憶體上限設太緊。
🔄 容器更新流程
Container Manager 沒有一鍵更新按鈕,但流程不複雜。
單一容器更新
- 映像頁面 → 找到該映像 → 點更新(重新拉取最新版)
- 等新映像下載完成
- 停止舊容器
- 刪除舊容器(Volume 資料不會被刪)
- 用相同設定重新建立容器
Compose 專案更新
更簡單:
- 專案頁面 → 找到專案 → 點編輯
- 如果需要改版本號就改,不需要就直接點重新部署
- Container Manager 會自動拉新映像、重建容器
更新前的安全措施
- 備份 Volume 資料:更新前先把
/volume1/docker/[應用名稱]/備份一份 - 記下目前版本:萬一新版有問題可以退回
- 看 Release Notes:重大版本更新可能有破壞性變更
進階做法:用 Hyper Backup 定期備份整個
/volume1/docker/目錄,這樣任何容器出問題都能還原。
🔒 安全性注意事項
Docker 容器跑在你的 NAS 上,安全性不能忽略。
基本原則
- 不要用 root 執行容器:設定 PUID / PGID,讓容器用一般使用者權限跑
- 不要隨意掛載 docker.sock:除非是管理工具(如 Portainer),否則不要把
/var/run/docker.sock掛進容器——這等於把整台 NAS 的控制權交出去 - 映像來源要可信:優先選官方映像或 linuxserver.io 的映像
- 定期更新:映像可能有安全漏洞,保持更新是最基本的防護
- 不要對外暴露不需要的 Port:只映射你真正需要的 Port
防火牆設定
如果你在 DSM 有開防火牆(建議開),Container Manager 映射的 Port 需要對應規則:
DSM 控制台 → 安全性 → 防火牆 → 編輯規則 → 新增允許的 Port。
只開你需要從外部存取的 Port。純內部使用的服務(例如資料庫)不需要開防火牆規則。
❓ 常見問題
容器一直重新啟動,怎麼查原因?
在容器清單找到問題容器 → 點進去看記錄分頁。最後幾行通常就是錯誤訊息。
常見原因: - 路徑不存在:Volume 掛載的 NAS 路徑沒建好 - Port 衝突:NAS 上的 Port 已被其他服務佔用 - 環境變數錯誤:密碼、資料庫名稱拼錯 - 記憶體不足:容器被 OOM Kill,放寬記憶體上限 - 映像架構不符:x86 映像跑在 ARM NAS 上
從外網連不到容器?
依序檢查三個地方:
- 容器 Port 映射有設正確(NAS Port → 容器 Port)
- DSM 防火牆有允許那個 Port
- 路由器 Port Forwarding 有把外部 Port 轉到 NAS IP
如果三個都正常還是不行,確認你的 ISP 沒有封鎖該 Port。部分業者會封鎖 80、443 以外的 Port。
更好的做法:不要直接開 Port,改用 Cloudflare Tunnel 或 Tailscale 從外部存取自架服務,更安全。
更新容器後資料不見了?
最常見的原因:沒有設定 Volume。 容器本身是暫時的,沒掛 Volume 的資料存在容器層,刪除就沒了。
補救方式:
- 如果容器還在(沒刪掉),可以用 docker cp 從容器內複製資料出來
- 如果已經刪了,資料無法恢復
- 往後一定要設 Volume,並定期用 Hyper Backup 備份 /volume1/docker/
Docker Hub 拉映像很慢?
Docker Hub 在某些地區速度不穩定。可以設定映像加速器(Registry Mirror):
SSH 進 NAS,編輯 /var/packages/ContainerManager/etc/dockerd.json,加入:
{
"registry-mirrors": ["https://mirror.gcr.io"]
}
然後重啟 Container Manager 套件。
容器佔用太多空間怎麼辦?
# SSH 進 NAS 後執行
# 查看 Docker 整體空間用量
docker system df
# 清除不用的映像、停止的容器、無用的網路
docker system prune
# 更激進:連沒有被任何容器使用的映像都清掉
docker system prune -a
小心:
prune -a會刪掉所有沒在跑的容器和沒被引用的映像。確認你沒有「暫停但打算之後再開」的容器。
Container Manager 和 Portainer 可以同時用嗎?
可以。Portainer 是另一套 Docker 管理 UI,功能比 Container Manager 更豐富(支援 Stack、多節點管理等)。兩者管理的是同一套 Docker,不衝突。
✨ 小結
Container Manager 是 Synology NAS 上跑 Docker 的標準入口。它把複雜的指令列操作搬進了圖形介面,但核心觀念跟 Docker 一模一樣——搞懂映像、容器、Volume、網路這四個概念,剩下的就是在介面上點幾下的事。
幾個原則,記住就能少踩坑:
- Volume 一定要設,沒設等於沒有備份
- 時區設
TZ=Asia/Taipei,不然記錄時間會對不上 - 重啟原則選「除非手動停止」,NAS 重開機後服務自動恢復
- 用 Compose 部署,設定可以版本控制,日後維護更容易
- 資源限制要設,防止一個失控的容器拖垮整台 NAS
Container Manager 跑起來之後,下一步可以加上 Nginx Proxy Manager 做反向代理,用網域名稱存取服務,告別記一堆 Port 號的日子。
🔗 延伸閱讀
- Docker 是什麼?NAS 新手入門完整解說 — 從概念開始理解映像、容器、Volume
- Synology NAS 必裝 Docker 服務推薦 — 10 個值得跑的自架服務
- 把 Docker 資料搬到 NVMe SSD — 讓容器跑在 SSD 上,效能大幅提升
- Nginx Proxy Manager 反向代理完整教學 — 用網域名稱存取容器服務