Skip to content

建立 2026-09-15 更新 2026-09-15

用 Stack 部署

Stacks 是 Portainer 裡最值得先學會的功能。一份 Docker Compose YAML 進去,Portainer 幫你部署成一組容器,之後改 YAML 再按部署即可。官方說明:Add a new stack

四種建立方式

方式 適用
Web editor 直接在瀏覽器貼 YAML,家用與教學最方便
Upload 手上已有 compose.yml
Git repository YAML 已放在 Git;可搭配自動更新,見 GitOps
Custom template 團隊反覆部署同一類應用

名稱請用小寫與連字號,例如 whoami。這會成為 Stack 識別,之後不好改。

最小範例

側欄選 StacksAdd stackWeb editor,貼上:

services:
  whoami:
    image: traefik/whoami
    ports:
      - "8080:80"
    restart: unless-stopped

Deploy the stack。成功後,瀏覽器開 http://主機IP:8080 應看得到回應。回到 Containers,會出現這個 Stack 底下的容器。

這份 YAML 與你在終端機跑 docker compose up -d 的內容相同。Portainer 沒有另創一套格式。

環境變數

資料庫密碼、網域這類「每台機器不同」的值,不要寫死在 YAML。在 Stack 頁填環境變數,Compose 裡用 ${變數名} 引用:

environment:
  POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

變數改了、YAML 沒改時,仍可重新部署。Swarm 環境不支援 Compose 的 env_file 合併方式,要逐項定義;Standalone 可用 Portainer 提供的 stack.env 寫法,細節見官方文件。

Bind mount 路徑

在 Portainer 的 Web editor 部署時,Compose 裡的相對路徑(例如 ./config:/config不是相對於你心中的專案資料夾,而是相對於 Portainer 寫出該檔案的位置(多半在它自己的資料 Volume 裡)。結果常是「以為掛到家目錄,其實掛到別處」。

Community Edition 上請用:

  • named volumepostgres_data:/var/lib/postgresql/data),或
  • 主機絕對路徑/opt/myapp/config:/config)。

相對路徑從 Git 展開、並指定本機目錄,是 Business Edition 的功能。

改設定與刪除

編輯 Stack 的 YAML 後再次 Deploy,等同更新這組服務。刪除 Stack 時,畫面上會問是否一併刪容器與相關網路。Volume 預設常會留下,這是為了避免誤刪資料庫;確定不要了再手動刪 Volumes。

已經在 CLI 用 Compose 跑起來的專案,硬用 Portainer 再部署同一份檔,可能名稱或網路衝突。要嘛整組改由 Portainer 管,要嘛繼續用 CLI,不要兩邊同時對同一組容器下指令。

相關資料