Docker 常用指令與 n8n 部署更新

筆記 Docker 常用指令與 n8n 部署更新全攻略

一般常用 docker 指令

檢查 Container 使用的 Image

docker ps -a

這會列出所有 Container(包括停止的)

重啟 Container:

用名字重啟:

docker start my-n8n

或用 ID 重啟(假設 ID 是 abc123)

docker start abc123

確認運行:

docker p

刪除 Container:

注意:這不會刪除你的資料,因為資料是存在 Volume(n8n_data)或本機路徑(~/n8n-data)裡,而不是 Container 本身。

docker rm my-n8n

列出所有 Image

docker images

初次使用下載並運行 n8n

方式 1:用 Docker Volume(n8n_data)

如果你想在新電腦上用 Docker 管理的 Volume(像之前一樣用 n8n_data):

  1. 直接下載並運行:
docker run -d --name my-n8n -p 5678:5678 -v n8n_data:/home/node/.n8n n8nio/n8n
  • 解釋:
    • docker run:啟動新 Container。
    • -d:背景運行。
    • –name my-n8n:命名為 my-n8n。
    • -p 5678:5678:映射端口,讓你用 localhost:5678 連線。
    • -v n8n_data:/home/node/.n8n:建立並掛載一個名叫 n8n_data 的 Volume 到 n8n 的資料路徑。
    • n8nio/n8n:從 Docker Hub 下載最新版 n8n Image。
  1. 確認運行:
    • 輸入:docker ps
    • 看到 my-n8n 在跑就成功了。
    • 然後用瀏覽器連 http://localhost:5678。

用 n8n_data,想更新到最新版:

# 拉取新 Image
docker pull n8nio/n8n

# 停止並刪除舊 Container
docker stop my-n8n
docker rm my-n8n

# 用新 Image 跑新 Container
docker run -d --name my-n8n -p 5678:5678 -e WEBHOOK_URL=https://你的網址.tw -v n8n_data:/home/node/.n8n n8nio/n8n

# 檢查運行狀態
docker ps

然後連 http://localhost:5678 確認。


更新 n8n 版本的流程(步驟詳解)

假設你目前用的是 n8nio/n8n:latest(最新版標籤),而且 Container 名叫 my-n8n,資料存在 n8n_data 或本機路徑(比如 ~/n8n-data)。以下是完整步驟:

步驟 1:拉取新版本的 Image

  1. 更新 Image:
    • 在終端機輸入:docker pull n8nio/n8n
    • 這會下載 n8nio/n8n:latest 的最新版本。
    • 如果你用的是特定版本(比如 n8nio/n8n:1.0.0),就把 n8nio/n8n 換成你想要的版本號,例如:docker pull n8nio/n8n:1.0.0
  2. 確認更新:
    • 輸入:docker images
    • 看 n8nio/n8n 的「CREATED」時間或「TAG」,確認有新的 Image(如果沒更新,Docker 會說「Already up to date」)。

步驟 2:停止並刪除舊 Container

因為 Container 是基於某個特定 Image 版本跑的,即使你更新了 Image,舊 Container 還是用舊版本,所以需要停掉並重建。

  1. 檢查目前 Container:
    • 輸入:docker ps -a
    • 找到 my-n8n 的狀態(可能是「Up」或「Exited」)。
  2. 停止 Container:
    • 如果它在跑(狀態是「Up」),輸入:docker stop my-n8n
  3. 刪除 Container:
    • 輸入:docker rm my-n8n
    • 注意:這不會刪除你的資料,因為資料是存在 Volume(n8n_data)或本機路徑(~/n8n-data)裡,而不是 Container 本身。

步驟 3:用新 Image 啟動新 Container

用跟之前一樣的參數跑一個新 Container,這樣新版本的 n8n 會接手舊資料。

  1. 用 n8n_data 跑:
    • 如果你用的是 n8n_data:docker run -d --name my-n8n -p 5678:5678 -e WEBHOOK_URL=https://你的網址.tw -v n8n_data:/home/node/.n8n n8nio/n8n
  2. 確認運行:
    • 輸入:docker ps
    • 看到 my-n8n 在跑,狀態是「Up」。
  3. 檢查版本:
    • 打開瀏覽器,連 http://localhost:5678。
    • 在 n8n 介面右下角看版本號,確認是否更新到最新版。

注意事項

  1. 資料安全:
    • 只要你有掛載 Volume(n8n_data 或 ~/n8n-data),刪除 Container 不會影響資料。
    • 如果不確定,跑新 Container 前可以用:docker volume ls 確認 n8n_data 還在,或檢查 ~/n8n-data 裡有沒有檔案。
  2. 版本相容性:
    • n8n 更新時,資料庫結構可能會變。如果新版本不兼容舊資料,啟動時可能會報錯。這種情況下,檢查 n8n 官網的更新說明,看看需不需要手動遷移資料。
  3. 快速檢查版本:
    • 跑完後可以用:docker exec my-n8n n8n --version 直接在終端機看 n8n 的版本號。

-e WEBHOOK_URL=https://你的網址.tw 是什麼意思?

  • 簡單解釋:
    • 這行是用來告訴 n8n:「當你需要產生 webhook 網址(比如 Telegram Trigger 用來收訊息的地址)時,請用 https://你的網址.tw 當基礎網址。」
    • -e 是 Docker 的參數,意思是設定環境變數(environment variable)。這裡的 WEBHOOK_URL 是 n8n 專用的變數,讓它知道自己的公開網址是什麼。
  • 為什麼需要?
    • n8n 跑在本機時(像 localhost:5678),它不知道自己對外網的公開網址是什麼。
    • 你用 Cloudflare Tunnel 把本地的 n8n 連到 https://你的網址.tw,所以要告訴 n8n:「別用 localhost,用這個公開網址來產生 webhook。」
    • 這樣 Telegram Trigger 的 webhook 網址才會是像 https://你的網址tw/webhook/一串亂碼,Telegram 才能正確送訊息過來。
  • 實際效果:
    • 當你設 -e WEBHOOK_URL=https://你的網址.tw,打開 n8n 的 Telegram Trigger 節點,Webhook URL 會自動變成 https://你的網址.tw/…,而不是本地的 http://localhost:5678/…。

轉用 docker-compose(更方便)

你現在用 docker run 每次都要打長串指令,更新時容易忘參數。改用 docker-compose 會簡單很多。步驟如下:

  1. 創 docker-compose.yml:
    • 在家目錄創資料夾:mkdir ~/n8n cd ~/n8n touch docker-compose.yml編輯 docker-compose.yml:
version: "3"
services:
  n8n:
    image: n8nio/n8n
    container_name: my-n8n
    ports:
      - "5678:5678"
    environment:
      - WEBHOOK_URL=https://你的網址.tw
    volumes:
      - n8n_data:/home/node/.n8n
  cloudflared:
    image: cloudflare/cloudflared
    container_name: cloudflared
    command: tunnel --no-autoupdate --hostname 你的網址.tw --url http://host.docker.internal:5678
    volumes:
      - /Users/你的用戶名/.cloudflared:/home/nonroot/.cloudflared
    depends_on:
      - n8n
volumes:
  n8n_data:

2. 更新流程(未來用):

  • 停掉舊的:
cd ~/n8ndocker-compose down
  • 拉新映像檔:
docker pull n8nio/n8n
  • 跑新的:
docker-compose up -d

3. 好處:

  • 設定寫在檔案,不用每次敲長串。
  • 跟舊的 n8n_data 無縫接軌。