前情提要
自架 n8n 跑在 GCP VM 的 Docker container,
某天備份 log 出現這行:
1 | Error tracking disabled because this release is older than 6 weeks. |
意思是 n8n 的 release 超過六週就會關掉錯誤追蹤,提醒你該更新了。
趁機整理一下 Docker 版 n8n 的更新流程。
更新前先確認現況
確認目前版本
1 | docker exec n8n n8n --version |
確認 container 設定
更新要重建 container,所以要先抓出原本的設定:
1 | docker inspect n8n --format '{{json .HostConfig.PortBindings}}' |
重點是找出三個東西:port、bind mount 路徑、自己設的 env。
更新三步驟
Step 1:pull 最新 image
1 | docker pull docker.n8n.io/n8nio/n8n |
Step 2:停掉舊 container
1 | docker stop n8n && docker rm n8n |
這時候 n8n 停機,資料不會消失,因為資料在 VM 本地的 bind mount 目錄,
跟 container 的生命週期完全無關。
Step 3:用相同設定重新啟動
1 | docker run -d \ |
把 -v 的路徑換成你自己的 bind mount 路徑,env 只帶你自己加的就好。
驗證
1 | docker exec n8n n8n --version |
確認版本號,確認 container 狀態是 Up,完成。
補充:備份
更新前要不要備份?
如果你有設 bind mount,資料就在 VM 本地,container 停掉不影響。
但如果更新後 n8n 有 migration 問題,舊 DB 可能回不去。
保險做法是更新前先手動跑一次備份:
1 | # 匯出所有 workflow |
或者搭一個 cron job 每天自動備份、git push,就不用每次更新前手動跑:
1 | # crontab -e |
小結
Docker 版 n8n 更新流程:
docker pull— 拉新 imagedocker stop n8n && docker rm n8n— 移除舊 containerdocker run— 用相同設定重建
停機時間大約 30 秒。
關鍵是 bind mount:資料住在 VM,不住在 container,container 砍掉重練資料不受影響。
(fin)