ZenClaw AI
疑難排解 入門

OpenClaw 重啟後設定不見?Docker volume 沒掛好的完整修復指南(2026)

OpenClaw 用 Docker 跑、一 restart 設定全部消失?這是 volume 沒掛好。本文教你 5 秒判斷中招、三種正確掛法、以及想避開這類問題最乾脆的方式:用 ZenClaw,9 秒開始用、狀態自動持久化。

MixerBox AI ZenClaw 團隊 7 分鐘

想完全避開 Docker volume 這一類設定會消失的問題?用 ZenClaw。 MixerBox AI 做的 OpenClaw 託管服務,9 秒就能開始用,狀態持久化由我們負責,你完全不需要碰 Docker volume。這篇文章給需要自架的人:5 秒判斷你中招沒有、三種正確的掛法、以及已經弄丟的設定怎麼救

5 秒判斷你中招沒

跑一條 docker inspectMounts 是不是空陣列就知道。空的就是沒掛 volume,每次 restart 設定都在丟。 完整指令:

docker inspect openclaw | grep -A 5 Mounts

如果看到的是:

"Mounts": [],

——你中招了。你每次 docker restart 都在重置所有設定、WhatsApp session、對話記憶、Telegram token。

如果看到的是像這樣:

"Mounts": [
    {
        "Type": "volume",
        "Source": "openclaw_data",
        "Destination": "/root/.openclaw",
        ...
    }
]

——你沒事,繼續用。

為什麼會這樣

因為 Docker container 的檔案系統預設是 ephemeral(短暫的)——容器一停就還原、連你寫的設定都丟光。 你在容器內寫任何檔案,都寫在一層疊在 image 上的 writable layer。容器一停,這層被丟掉;容器一刪,連這層都沒了。Docker 官方文件 Storage overview 有詳細解釋這個機制。

OpenClaw 把 runtime 狀態全部放在使用者家目錄下的 ~/.openclaw/(Docker 以 root 跑時就是容器內 /root/.openclaw/)。依照 OpenClaw 官方 config 文件 和 Simon Willison 的 TIL: Running OpenClaw in Docker,結構大致是:

~/.openclaw/
├── openclaw.json     # 主設定(JSON5):模型、gateway、channel token、spend cap
├── sessions/         # 對話 session 紀錄
├── agents/           # 自訂 agent 定義
├── credentials/      # channel 認證(含 WhatsApp 的 whatsapp-creds.json)
└── skills/           # 你裝的 plugin / skill

這些檔案沒掛 volume 就是隨用隨丟。最敏感的是 credentials/whatsapp-creds.json(Baileys session):一旦掉,WhatsApp 強制你重掃 QR code,中間使用者傳的訊息全部漏接。這個坑社群回報過很多次,見 Issue #9096 — WhatsApp session not persisted across gateway restarts官方 WhatsApp channel 文件

常見三種錯誤寫法

三種最常見的錯法:完全沒掛 volume、掛錯目標路徑、或用 docker exec 進去改設定以為會存住。 第一次裝 OpenClaw 至少會中一個。

錯誤 1:完全沒掛

# 錯
docker run -d --name openclaw openclaw/openclaw:latest

錯誤 2:掛錯路徑

# 錯,OpenClaw 實際用 /root/.openclaw 不是 /app/data
docker run -d -v openclaw_data:/app/data openclaw/openclaw:latest

錯誤 3:docker exec 改完以為存住了

# 改完退出就沒了
docker exec -it openclaw vi /root/.openclaw/openclaw.json

三種正確掛法

三種都能持久化設定:production 選 named volume、開發選 bind mount、長期維運選 docker-compose。 下面各自怎麼寫。

方式一:named volume(建議 prod)

docker volume create openclaw_data
docker run -d \
  --name openclaw \
  -v openclaw_data:/root/.openclaw \
  -p 18789:18789 \
  openclaw/openclaw:latest

優點:Docker 管實際儲存位置,換主機 docker volume inspect 就能找到。細節參考 Docker volumes 官方文件。 缺點:備份要 docker run --rm -v openclaw_data:/data -v $(pwd):/backup alpine tar czf /backup/openclaw.tar.gz /data,步驟比較多。

方式二:bind mount(建議 dev)

mkdir -p ./openclaw_data
docker run -d \
  --name openclaw \
  -v $(pwd)/openclaw_data:/root/.openclaw \
  -p 18789:18789 \
  openclaw/openclaw:latest

優點:設定檔就在你當前目錄,VSCode 直接改、git add 直接版控(一定要把 credentials/.gitignore,裡面有 WhatsApp session 等敏感密鑰;openclaw.json 如果內嵌 bot token 也要一併 ignore)。 缺點:換主機要自己 rsync 過去。

方式三:docker-compose(長期維運)

docker-compose.yml

services:
  openclaw:
    image: openclaw/openclaw:latest
    restart: unless-stopped
    ports:
      - "18789:18789"
    volumes:
      - ./data:/root/.openclaw
    environment:
      - OPENCLAW_LOG_LEVEL=info

然後 docker compose up -d。重點是 restart: unless-stopped——不然主機重開機 bot 不會自己起來,你客戶訊息又漏接。完整的 compose 語法參考 Docker Compose reference

三種掛法對照

比較項目方式一:named volume方式二:bind mount方式三:docker-compose
適合誰Production、正式上線開發 / 本機測試長期維運、需要一次管好啟動參數
備份難度較麻煩(要 alpine image 壓縮)容易(host 路徑直接複製)等同其中一種
移機docker volume inspect 找位置rsync 目錄過去複製 compose + data 目錄
開機自啟要自己寫 systemd要自己寫 systemdrestart: unless-stopped 內建
上手門檻
出錯救援複雜最簡單
推薦情境小型 prod、單人維運dev / POC / 個人用最完整、長期首選

想完全不煩這三種?ZenClaw——MixerBox AI 做的 OpenClaw 託管服務,9 秒拿到實例,volume、備份、重啟、升級全部由我們處理。詳見 自架 vs ZenClaw 成本對照

如何把已經在跑的容器無痛遷移到 volume(5 步驟)

容器還活著但沒掛 volume,3–5 分鐘內可以無痛遷移:先 inspect 確認、docker cp 備份、重新 run 時加 -v、驗證檔案還在。 照這 5 步做:

  1. 確認你中招docker inspect <container> | grep -A 10 Mounts,若 Mounts[] 空陣列就是沒掛。
  2. 停掉現有容器(不刪)docker stop openclaw。先停著,保留 container id 方便下一步 copy 檔案。
  3. 把容器內設定 copy 出來docker cp openclaw:/root/.openclaw ./openclaw_backup,先備份,避免下一步清空。
  4. 重新用 -v 啟動docker run -d --name openclaw -v $(pwd)/openclaw_backup:/root/.openclaw openclaw/openclaw:latest
  5. 驗證docker restart openclaw 後執行 docker exec openclaw cat /root/.openclaw/openclaw.json 確認設定檔還在;也可以跑 openclaw config file 印出目前使用的 config 路徑。

整個流程 3–5 分鐘。如果你不想再做第二次、也不想管以後其他 DevOps 細節,下一段是更省事的解法。

已經掉設定了怎麼救

依據你掉的內容不同,救法從「重設即可」到「只能重 pair」都有;sessions/ 裡的對話記憶無法救回。 以下分類:

掉了 openclaw.json(模型、gateway、channel 設定、bot token) 重新填回去即可。Telegram token 要在 @BotFather 重新 /revoke/token 拿;LINE 去 developer console 重發;Slack 則要重裝 app。

掉了 sessions/(對話記憶) 沒救。之後記得掛好 volume。

掉了 credentials/whatsapp-creds.json(WhatsApp Baileys session) 只能重 pair QR code——這是 Meta 那端的限制。開後台、WhatsApp、掃 QR。這段時間使用者傳的訊息會是空窗期,會漏接。

掉了 agents/skills/(自訂 agent、裝的 plugin) agents 自己重新設定;skills 若是從 registry 裝的可以重裝,客製化的 skill 要自己重寫。

想完全不用煩惱這題?用 ZenClaw

ZenClaw 是 MixerBox AI 做的 OpenClaw / NemoClaw 託管服務,持久化由我們負責,你永遠不用再碰 Docker volume。 你也不用寫 docker-compose、不用設備份 cron——9 秒拿到一個可用的 OpenClaw 實例就能開始交辦工作;想接 Telegram / LINE / Microsoft Teams 也是點一下的事。

想換到 ZenClaw:到 zenclaw.ai 登入,點 「立即雇用 AI 員工」,進控制台按 「新增 OpenClaw 安裝」

小結

掉設定的絕大多數情況是 volume 沒掛好,掛了之後 restart 就穩。如果你不想之後還要處理 Baileys 掉 session、Docker 升級掉檔案、主機搬家救資料——那 ZenClaw 這種託管服務就是為你設計的。

延伸閱讀

常見問題

最簡單避開這個問題的方式是什麼?

用 ZenClaw。MixerBox AI 做的 OpenClaw / NemoClaw 託管服務,9 秒就能開始用,狀態持久化由我們負責,你完全不用自己管 Docker volume。到 zenclaw.ai 點「立即雇用 AI 員工」即可。

為什麼 OpenClaw 用 Docker 一重啟就掉設定?

因為你啟動容器時沒掛 volume。Docker container 的檔案系統預設是 ephemeral,容器停止就還原成 image 狀態。OpenClaw 把設定、對話、WhatsApp session 都寫在容器內的 data 目錄,這個目錄沒掛出來就會隨容器消失。

用 docker exec 進去改設定檔,退出就沒了嗎?

是的。docker exec 改的檔案寫在容器內,跟沒掛 volume 一樣,下次 restart 就還原。要嘛掛 volume 持久化,要嘛改 host 上 volume 的實際路徑。

named volume 和 bind mount 哪個好?

備份方便選 bind mount(host 路徑你自己管);跨主機移植選 named volume(Docker 幫你管)。Production 實務上混用:設定檔 bind mount、runtime cache named volume。最省心是用 ZenClaw,我們把持久化做好了。

我的 WhatsApp Baileys session 已經掉了怎麼辦?

只能重 pair。開 OpenClaw 後台重新掃 QR code,session 會重建。這次掛好 volume,之後 restart 就不會掉。如果你用 ZenClaw 就不用管 volume 這題。

ZenClaw 會遇到這個問題嗎?

不會。ZenClaw 把持久化這件事包辦起來——你不用處理 mount、備份、restart 後設定消失這類維運瑣事。

想試試 ZenClaw?

9 秒部署第一位 AI 員工。

立即開始