01:Hello, OpenClaw — 凌晨兩點的 AI 奇遇
當我在凌晨兩點滑著 GitHub 的時候,我沒想到接下來的一個月會是這樣的光景:
- 容器陣亡 9 次。
- 追著 3 天改了 3 個名字的東西跑。
- 放棄 NAS 改上雲端,最終卻又回到 NAS。
- 最後養出兩隻 AI 貓咪共同協作。
這是「Nerigate」建置日誌系列的第一篇,我想先跟你聊聊:為什麼一個正在面臨職涯危機的人會在深夜搞這些?
一切從 Mac Mini M4 開始
你可能聽過最近 Mac Mini M4 熱銷的消息。但你知道有一群人買它不是為了剪片、寫程式,而是——養 AI?沒錯,就是字面意義的「養」。讓一個 AI Agent 24/7 跑在本機,隨時待命,自動執行任務,甚至主動提醒你該做什麼。這不是科幻片,是現在進行式。
我第一次聽到這概念時的反應是:「喔喔,這聽起來挺厲害的…但我哪有錢買 Mac Mini?」
接著我看了一眼角落的 Synology DS920+。
「等等,NAS 不就是台 24/7 不關機的 Linux 主機嗎?」
「Intel J4125 四核心、8GB RAM,應該⋯可以吧?」
所以我當下做了個決定:不買新機(反正也沒錢買),直接在 NAS 上跑看看先。
結果呢?這個決定讓我在接下來的 27 小時內見識到什麼叫「可以,但沒那麼簡單」。
Clawdbot? Moltbot? OpenClaw?
夜半臨睡前,滑滑手機看看 FB、Threads 再正常不過了,但接連看到一個新鮮的名詞出現在各大技術文中,那就著實引起我的興趣,於是在 GitHub 上搜尋「AI Agent self-hosted」的時候,我找到它的 repo:Clawdbot。
文件寫得很清楚:
- 可以跑在 Docker
- 支援各大模型的 API
- 有 Web 介面
- 還能整合 Telegram、Discord 讓你直接下命令
完美!就是你了!
於是我興沖沖地準備 pull Docker image:
docker pull ghcr.io/clawdbot/clawdbot:latest
然後 Docker 很冷靜地回我:
Error response from daemon: manifest for ghcr.io/clawdbot/clawdbot:latest not found
「???」
我重新檢查 GitHub README,發現一行小字:
⚠️ The project has been renamed to moltbot好,那就改成 moltbot:
docker pull ghcr.io/moltbot/moltbot:latest
Docker:
Error: denied: repository does not exist
「?????」
我開始翻 Issues、翻 Discussions,然後發現有人在問:
"Why can't I find the moltbot package on npm?"
作者回覆:
"We've renamed back to OpenClaw. Please use ghcr.io/molt-bot/moltbot for now until we migrate everything."我看著螢幕,深呼吸。
這是一個有三個名字的專案。
- 原名:Clawdbot
- 改名:Moltbot
- 最終名:OpenClaw
- 但映像檔路徑還是
molt-bot/moltbot
這就像你去找一個朋友,他家門牌寫「王大明」,但信箱寫「大明王」,按門鈴時他說「我現在叫 Kevin」。
第一課:追著 AI 工具改名跑,是建置旅程的常態。
DS920+:我可以的(應該吧?)
好,名字的事先擱著,我們來談談硬體。
Synology DS920+ 規格:
- CPU: Intel Celeron J4125 (4C4T, 2.0-2.7GHz)
- RAM: 8GB DDR4
- OS: DSM 7.2 (基於 Linux)
- Docker: ✅ 支援
看起來沒問題,對吧?
當時我的想法是這樣的:
「Clawdbot(好吧,OpenClaw)只是一個 Node.js 應用 + Model API,不會吃太多資源。」
「DS920+ 平常只是跑個 Plex、掛個下載,還有一堆空閒效能。」
「如果 Mac Mini M4 可以,我的 NAS 應該也可以!」
這個邏輯沒錯。
但我忽略了一件事:「可以跑」跟「能順利跑起來」是兩回事。
特別是當你需要處理:
- Docker 網路設定
- 權限問題(NAS 的 UID/GID 地獄)
- 瀏覽器沙盒(OpenClaw 需要 Chrome/Playwright)
- Port forwarding
- HTTPS 憑證(Telegram/Discord Webhook 強制要求)
每一項單獨看都不難,但全部加在一起,就變成了一場⋯⋯
⚰️ 陣亡循環。
凌晨 00:07:第一次 denied
時間回到 1/28 凌晨。
我在 Synology 的 Container Manager 裡開了一個新專案,準備 pull image。
docker pull ghcr.io/molt-bot/moltbot:latest
Docker:
Error response from daemon: denied: repository does not exist or may require 'docker login'
「喔對,GitHub Container Registry 需要認證。」
於是我去申請了一個 GitHub Personal Access Token (PAT),給它 read:packages 權限,然後:
echo $GITHUB_TOKEN | docker login ghcr.io -u kevin --password-stdin
docker pull ghcr.io/molt-bot/moltbot:latest
這次成功了!🎉
latest: Pulling from molt-bot/moltbot
Digest: sha256:abc123...
Status: Downloaded newer image for ghcr.io/molt-bot/moltbot:latest
我看著進度條跑完,心想:「好的,最難的部分結束了。」
錯。
最難的部分才剛開始。
凌晨 00:21:MODULE_NOT_FOUND
Image 下載完,接下來是寫 docker-compose.yml。
我參考了官方文件,寫了一個基本配置:
version: '3.8'
services:
moltbot:
image: ghcr.io/molt-bot/moltbot:latest
container_name: moltbot-gateway
environment:
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
ports:
- "3000:3000"
volumes:
- ./workspace:/app/workspace
restart: unless-stopped
看起來沒問題。docker-compose up -d,容器啟動!
然後⋯⋯
moltbot-gateway | Error: Cannot find module '/app/gateway'
moltbot-gateway exited with code 1
「???」
我進到容器裡看:
docker exec -it moltbot-gateway sh
ls /app
結果發現 /app 底下根本沒有 gateway 這個檔案。
「那 entrypoint 到底在執行什麼?」
我翻了 Dockerfile,發現 entrypoint 設定是:
ENTRYPOINT ["node", "/app/gateway"]
但實際上,正確的執行檔位置是 /app/dist/index.js,而且要透過 npx moltbot 這個指令來呼叫。
第二課:官方文件跟實際程式碼不一定同步。
凌晨 00:25:command 只寫 gateway,系統誤判
好,那我改一下 docker-compose.yml:
command: gateway
再啟動一次。
這次容器沒報錯,但⋯⋯它直接退出了。
moltbot-gateway exited with code 0
「Exit code 0 是正常結束,但為什麼啟動後就結束?」
我查看 logs:
docker logs moltbot-gateway
看到的是:
Usage: moltbot <command> [options]
Commands:
gateway Start the OpenClaw gateway
pairing Manage pairing
...
它把我的 command: gateway 當成⋯⋯顯示 help 選單。
然後就退出了。
優雅,禮貌,但沒用。
凌晨 00:30:不預期停止的無限循環
此時 Synology 的 Container Manager 介面開始出現詭異現象:
- 我看到容器顯示「執行中」
- 點開 WebUI 連結 → 「容器不存在」
- 重新整理 → 容器 ID 變了
幽靈容器現象。
因為容器會:
- 啟動
- 顯示 help
- 退出(Exit 0)
- Docker 看到
restart: unless-stopped,重新啟動 - 回到步驟 1
這個循環每 3 秒跑一次。
而 Synology 的 UI 因為抓不到「瞬息萬變的容器 ID」,所以一直顯示錯誤。
我看著 logs 不斷重複:
Usage: moltbot <command>...
Container restarting...
Usage: moltbot <command>...
Container restarting...
第三課:當 Docker 說 Exit Code: 0,它的意思不是「成功」,而是「我不幹了」。
凌晨 00:45:終極大招 — sleep infinity
在反覆陣亡 4 次後,我決定用一招⋯⋯非常蠢,但保證有用的方法:
command: sleep infinity
讓容器活著,什麼都不做,只是活著。
然後手動進去終端機執行指令。
docker exec -it moltbot-gateway sh
cd /app
node dist/index.js gateway
這次⋯⋯成功了!🎉
OpenClaw Gateway starting...
Listening on port 3000
我興奮地打開瀏覽器,輸入 http://192.168.1.xxx:3000
看到了 OpenClaw 的 WebUI!
然後它顯示:
Status: Disconnected
Reason: Pairing required
「⋯⋯」
「好,至少容器活著了。」
第四課:sleep infinity 維護模式 — 蠢,但有效。
這只是開始
到此為止,時間是凌晨 1 點。
我成功讓 OpenClaw 的容器跑起來了,但距離「真正能用」還有十萬八千里:
- ❌ Pairing 認證還沒搞定
- ❌ 權限問題(UID 1000 vs 1026)
- ❌ 瀏覽器沙盒環境
- ❌ HTTPS 憑證
- ❌ Webhook 設定
更不用說,我還不知道接下來會遇到什麼。
但至少,我跟 OpenClaw 正式見面了。
Hello, OpenClaw。
很高興認識你。
雖然你讓我在凌晨陣亡了 4 次。
下集預告
下一篇,我們會進入真正的地獄:
- PowerShell 的「無法辨識」三連擊
- MODULE_NOT_FOUND 的 9 種變體
- 為什麼
npm install -g之後還是找不到指令 - 以及⋯⋯「Hello, Moltbot」之後就沒有然後了
《當 Docker 說再見的第九次:NAS 上的陣亡循環》
敬請期待 🐾