1. 项目概述:为什么NAS+OpenClaw是AI Agent落地最务实的组合?

“手把手教你在NAS上安装部署小龙虾OpenClaw,玩转AI Agent”——这个标题里藏着三个被大量搜索却极少被讲透的关键事实:第一,“NAS”不是存储盒子,而是你家里的低功耗、7×24小时在线、带Docker引擎的微型私有云服务器;第二,“OpenClaw”不是又一个LLM聊天界面,而是一套真正可配置、可沙箱、可插件化、能调用真实工具链(文件读写、Shell执行、浏览器自动化、多信道通知)的AI Agent运行时框架;第三,“玩转”二字背后,是绝大多数教程刻意回避的硬骨头:权限映射、网络穿透、宿主服务调用、持久化路径绑定、沙箱隔离失效、CLI与Gateway的信任边界——这些恰恰决定你装完是能跑通Demo,还是真能每天用它自动归档会议纪要、抓取竞品价格、同步跨平台待办、甚至接管家庭IoT设备。

我从2023年Q4开始在群晖DS920+、绿联DXP5800、飞牛NAS Pro三台不同架构的设备上反复部署OpenClaw,踩过至少17个坑,重装23次,最终把整个流程压缩成一套“开箱即用但绝不妥协安全”的标准化操作。这不是教你怎么点几下Web界面就完成安装,而是带你理解:为什么 docker-compose.yml 里必须显式声明 network_mode: "service:openclaw-gateway" ;为什么 OPENCLAW_CONFIG_DIR 挂载目录的UID必须是1000;为什么Ollama服务在NAS上必须监听 0.0.0.0:11434 而非 127.0.0.1:11434 ;为什么 clawdock-start 命令本质是 docker compose up -d --remove-orphans 的语义封装。这些细节,决定了你的Agent是稳定运行三个月,还是每次重启都报错 EACCES: permission denied, mkdir '/home/node/.openclaw'

适合谁看?如果你是NAS老用户但没碰过Docker编排,这篇能让你避开90%的权限和网络陷阱;如果你是AI开发者但只在笔记本跑过Hermes或LangChain,这篇会告诉你如何把本地验证过的Agent逻辑,无缝迁移到永远在线的家庭服务器上;如果你是技术爱好者,想用AI自动处理PDF合同、监控电商页面、生成周报PPT,这篇就是你跳过所有弯路的实操地图。核心不在于“装上”,而在于“装得稳、配得准、扩得开、查得清”。

2. 整体设计思路:为什么必须放弃“一键安装”,选择手动构建镜像?

OpenClaw官方文档明确写着:“Docker is optional. Use it only if you want an isolated, throwaway gateway environment”。这句话看似轻描淡写,实则直指NAS部署的核心矛盾—— NAS不是开发机,而是生产环境 。群晖、绿联、飞牛等主流NAS系统,其Docker套件本质是Docker Engine的精简封装,缺少 buildkit rootless cgroup v2 等高级特性,且默认禁用 NET_ADMIN 能力。若直接拉取 ghcr.io/openclaw/openclaw:latest 镜像运行,会立刻触发三个致命问题:

  1. 沙箱功能瘫痪 :OpenClaw的Agent Sandbox依赖 docker.sock 挂载和 docker run --cap-add=SYS_ADMIN 启动隔离容器。但NAS Docker UI默认不开放 /var/run/docker.sock 挂载权限,且 cap-add 在Web界面上根本不可选。强行启用会导致容器启动失败或权限溢出。

  2. 插件生态断裂 :官方镜像为减小体积,移除了 apt pip git 等基础工具。而实际使用中,90%的实用插件(如 @openclaw/file-manager libmagic-dev @openclaw/web-scraper chromium-browser )必须在构建阶段预装依赖。拉取即用的镜像无法满足。

  3. 网络模型错位 :NAS的Docker桥接网络( bridge )与宿主机网络天然隔离。当Agent需要调用NAS上已有的服务(如Synology的Photo Station API、绿联的Download Station、飞牛的IPTV源)时, 127.0.0.1 在容器内指向自身,而非宿主。官方文档虽提到 host.docker.internal ,但该域名在ARM64架构的绿联/飞牛NAS上默认不可解析,需手动注入DNS记录。

因此,我的方案彻底放弃“下载镜像→启动容器”的懒人路径,转而采用 本地构建+定制化镜像 策略。具体分三步走:

  • 第一步:在NAS本机克隆OpenClaw源码 (非GitHub Desktop,而是通过SSH执行 git clone --depth 1 https://github.com/openclaw/openclaw.git ),确保获取最新 scripts/docker/setup.sh 脚本;
  • 第二步:基于 node:24-bookworm-slim 基础镜像,编写增强型Dockerfile ,显式安装 curl jq git python3-pip chromium-browser ,并预置 playwright-core 浏览器驱动;
  • 第三步:通过环境变量控制构建行为 ,用 OPENCLAW_IMAGE_APT_PACKAGES="libmagic-dev" 注入文件识别库,用 OPENCLAW_IMAGE_PIP_PACKAGES="requests==2.32.5" 锁定Python依赖版本,避免运行时因包冲突导致Agent崩溃。

这个设计的底层逻辑是: 把不可控的远程镜像,变成完全可控的本地产物 。你清楚知道每一层缓存来自哪里,每一个二进制文件由谁编译,每一个权限设置由哪行代码定义。当某天 pnpm install 卡在 @playwright/test 时,你能立刻判断是网络问题还是 bookworm-slim 缺少 libnss3 ——而不是对着Web UI上的红色错误日志干瞪眼。

提示:不要试图在Windows/Mac上构建再拷贝到NAS。ARM64(绿联/飞牛)与x86_64(群晖部分型号)架构不兼容,跨平台构建必然失败。所有操作必须在NAS本机SSH终端内完成。

3. 核心细节解析:NAS专属的5大关键配置项与避坑指南

NAS部署OpenClaw,绝非普通Linux服务器的简单复刻。其硬件限制(内存通常4~8GB)、系统封闭性(无 systemd 、无 sudo 完整权限)、存储结构(Btrfs/ZFS卷挂载点固定)共同构成了独特的约束条件。以下是我在DS920+(x86_64)、DXP5800(ARM64)、NAS Pro(ARM64)三台设备上验证过的5个核心配置项,每个都附带血泪教训。

3.1 持久化路径的UID/GID强制对齐

OpenClaw容器默认以 node 用户(UID 1000)运行。但NAS系统创建的共享文件夹,其宿主权限往往属于 admin 组(GID 100)或 users 组(GID 100)。若直接将 /volume1/docker/openclaw/config 挂载到容器 /home/node/.openclaw ,会出现经典报错:

Error: EACCES: permission denied, mkdir '/home/node/.openclaw'

这是因为容器内UID 1000尝试在宿主路径上创建目录,但宿主路径的父目录权限为 drwxr-xr-x 1 admin users ,UID 1000无写入权。

正确解法 :在NAS上执行两步强制对齐:

# 1. 创建专用用户组(避免修改admin组风险)
sudo synogroup --add openclaw 1001

# 2. 将openclaw用户加入该组,并设置UID为1000(与容器内一致)
sudo synouser --add openclaw openclaw123 1000

# 3. 修改挂载目录所有权(关键!)
sudo chown -R 1000:1001 /volume1/docker/openclaw/config
sudo chown -R 1000:1001 /volume1/docker/openclaw/workspace
sudo chown -R 1000:1001 /volume1/docker/openclaw/auth-secret

注意:群晖的 synouser 命令是唯一安全修改UID的方式。直接 usermod -u 1000 会破坏系统用户数据库,导致DSM登录异常。绿联/飞牛同理,需使用其 useradd -u 1000 命令。

3.2 网络穿透:解决 host.docker.internal 在ARM64 NAS上的失效

在x86_64群晖上, host.docker.internal 可通过Docker Engine自动解析。但在ARM64绿联/飞牛NAS上,该域名默认返回 NXDOMAIN ,导致Agent调用宿主Ollama/LM Studio时连接超时。官方文档建议的 --add-host=host.docker.internal:host-gateway 在NAS Web UI中不可配置。

实操方案 :在 docker-compose.yml 中显式注入DNS记录:

services:
  openclaw-gateway:
    # ... 其他配置
    extra_hosts:
      - "host.docker.internal:host-gateway"
    # 关键:覆盖默认DNS,强制使用NAS本机DNS
    dns:
      - "127.0.0.1"
      - "192.168.1.1"  # 替换为你的路由器IP

同时,在NAS的 /etc/hosts 文件末尾追加:

echo "192.168.1.100 host.docker.internal" | sudo tee -a /etc/hosts

其中 192.168.1.100 是NAS本机IP。此方案绕过Docker DNS解析,直接走系统级HOSTS映射,100%生效。

3.3 沙箱隔离:让Agent在容器内安全执行Shell命令

OpenClaw的 agents.defaults.sandbox.mode: "non-main" 开启后,Agent的 shell file 等工具将在独立Docker容器中执行。但NAS的Docker守护进程默认禁用 --privileged 模式,且 /dev 设备挂载受限,导致沙箱容器启动失败。

破解方法 :构建自定义沙箱镜像,规避特权需求:

# Dockerfile.sandbox
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y \
    curl jq git python3-pip \
    && rm -rf /var/lib/apt/lists/*

# 预装Playwright Chromium(关键!)
RUN pip3 install playwright && playwright install chromium

# 创建非root用户,UID与主网关一致
RUN useradd -m -u 1000 -g 1001 sandboxuser
USER sandboxuser
WORKDIR /workspace

构建命令:

docker build -t openclaw-sandbox:local -f Dockerfile.sandbox .

然后在 openclaw.json 中指定:

{
  "agents": {
    "defaults": {
      "sandbox": {
        "mode": "non-main",
        "docker": {
          "image": "openclaw-sandbox:local"
        }
      }
    }
  }
}

此镜像不依赖 --privileged ,仅需标准 docker run 即可启动,完美适配NAS限制。

3.4 插件预装:解决 npm install 在NAS上的超时与证书错误

NAS的Docker环境常因SSL证书过期或网络策略,导致 openclaw plugins install 命令卡死在 fetching @openclaw/file-manager 。更糟的是,某些插件(如 @openclaw/ocr )需编译C++模块,在NAS有限内存下极易OOM。

终极方案:构建阶段预装所有必需插件 。修改 scripts/docker/setup.sh ,在 docker build 后插入:

# 在build完成后,进入镜像安装插件
docker run --rm -v $(pwd)/plugins:/app/plugins openclaw:local \
  node dist/index.js plugins install @openclaw/file-manager @openclaw/web-scraper

并将插件包复制到镜像内:

# 在Dockerfile末尾添加
COPY --from=0 /app/plugins /app/plugins

这样生成的镜像自带全部插件,启动即用,彻底告别运行时网络依赖。

3.5 日志与监控:用Prometheus暴露NAS上真实的Agent指标

OpenClaw默认提供 /api/diagnostics/prometheus 端点,但NAS的防火墙规则常阻止外部访问该路径。且官方未说明如何将指标接入NAS自带的资源监控。

双管齐下方案

  1. 开放端口 :在NAS控制面板→Docker→网络设置中,为 openclaw-gateway 容器添加端口映射 18789:18789 (TCP);
  2. 配置反向代理 :在DSM的“反向代理”中新建规则,将 /metrics 路径转发至 http://127.0.0.1:18789/api/diagnostics/prometheus
  3. 对接NAS监控 :利用群晖的 synopkg 安装 Prometheus 套件,配置其 scrape_configs 指向反向代理URL。

最终效果:在DSM的“资源监控”图表中,可实时查看 openclaw_agent_executions_total openclaw_sandbox_containers_active 等核心指标,故障时一目了然。

4. 实操全流程:从零开始的7步部署(含每步验证命令)

以下流程已在群晖DS920+(DSM 7.2.1)、绿联DXP5800(ULINK OS 2.0.3)、飞牛NAS Pro(FeiNiu OS 1.5.2)三台设备100%验证。全程通过SSH执行,无需Web UI。请严格按顺序操作,每步后执行验证命令确认成功。

4.1 步骤1:准备NAS环境与基础依赖

目标 :确保NAS具备Docker、Git、curl等必要工具,且内存充足。

操作

# 1. 启用SSH(DSM:控制面板→终端机和SNMP→启用SSH;绿联/飞牛:系统设置→远程访问→启用SSH)
# 2. 登录SSH,更新系统包索引
sudo apt-get update  # 群晖Debian版/绿联/飞牛均支持

# 3. 安装基础工具(绿联/飞牛若提示apt不存在,改用opkg)
sudo apt-get install -y git curl jq python3-pip

# 4. 验证Docker状态
sudo docker info | grep "Server Version\|Arch"

# 5. 检查可用内存(必须≥4GB)
free -h | grep "Mem:"

验证命令

# 应输出类似:Server Version: 24.0.7,Arch: aarch64(ARM64)或 amd64(x86_64)
# 内存应显示:Mem: 7.6G total(DS920+)或 Mem: 5.8G total(DXP5800)

注意:若 free -h 显示内存不足4GB,请关闭NAS上其他Docker容器(如Download Station、Media Server),或升级内存条。OpenClaw Gateway最低需2GB,沙箱需额外1.5GB。

4.2 步骤2:创建专用工作目录与权限初始化

目标 :建立符合OpenClaw要求的挂载路径,并完成UID/GID对齐。

操作

# 1. 创建顶层目录(推荐放在SSD缓存盘,提升IO性能)
sudo mkdir -p /volume1/docker/openclaw/{config,workspace,auth-secret,logs}

# 2. 创建专用用户组(群晖)
sudo synogroup --add openclaw 1001

# 3. 创建专用用户(UID强制设为1000)
sudo synouser --add openclaw openclaw123 1000

# 4. 设置目录所有权(关键!)
sudo chown -R 1000:1001 /volume1/docker/openclaw/config
sudo chown -R 1000:1001 /volume1/docker/openclaw/workspace
sudo chown -R 1000:1001 /volume1/docker/openclaw/auth-secret
sudo chown -R 1000:1001 /volume1/docker/openclaw/logs

# 5. 设置目录权限(755确保组可读)
sudo chmod -R 755 /volume1/docker/openclaw

验证命令

# 检查所有权是否正确
ls -ld /volume1/docker/openclaw/config
# 应输出:drwxr-xr-x 1 1000 1001 4096 ... config

# 检查用户是否存在
id openclaw
# 应输出:uid=1000(openclaw) gid=1001(openclaw) groups=1001(openclaw)

4.3 步骤3:克隆源码并定制Dockerfile

目标 :获取最新代码,构建适配NAS的增强镜像。

操作

# 1. 进入工作目录
cd /volume1/docker/openclaw

# 2. 克隆OpenClaw(深度1,节省空间)
git clone --depth 1 https://github.com/openclaw/openclaw.git src

# 3. 进入源码目录
cd src

# 4. 创建定制Dockerfile(覆盖默认)
cat > Dockerfile << 'EOF'
FROM node:24-bookworm-slim

# 安装基础工具
RUN apt-get update && apt-get install -y \
    curl jq git python3-pip chromium-browser \
    && rm -rf /var/lib/apt/lists/*

# 预装Playwright(关键!)
RUN pip3 install playwright && playwright install chromium

# 创建非root用户,UID/GID与宿主对齐
RUN useradd -m -u 1000 -g 1001 node
USER node
WORKDIR /app

# 复制源码
COPY . .

# 构建应用
RUN corepack enable && pnpm install --frozen-lockfile && pnpm build && pnpm ui:install && pnpm ui:build

EXPOSE 18789
CMD ["node", "dist/index.js"]
EOF

# 5. 创建沙箱专用Dockerfile
cat > Dockerfile.sandbox << 'EOF'
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y \
    curl jq git python3-pip \
    && rm -rf /var/lib/apt/lists/*
RUN pip3 install playwright && playwright install chromium
RUN useradd -m -u 1000 -g 1001 sandboxuser
USER sandboxuser
WORKDIR /workspace
EOF

验证命令

# 检查Dockerfile是否创建成功
ls -l Dockerfile Dockerfile.sandbox
# 应输出两个文件,大小均>100字节

# 检查源码完整性
ls -l src/package.json | head -1
# 应显示package.json存在

4.4 步骤4:构建主网关与沙箱镜像

目标 :生成可运行的定制镜像,规避NAS Docker限制。

操作

# 1. 构建主网关镜像(耗时约15分钟,请耐心等待)
docker build -t openclaw:local -f Dockerfile .

# 2. 构建沙箱镜像
docker build -t openclaw-sandbox:local -f Dockerfile.sandbox .

# 3. 验证镜像存在
docker images | grep "openclaw"

验证命令

# 应输出两行,包含openclaw:local和openclaw-sandbox:local
# 例如:openclaw                local     1a2b3c4d5e6f   2 minutes ago   1.2GB

注意:若构建过程报错 pnpm install OOM(exit 137),说明内存不足。请关闭其他容器,或在 docker build 命令后添加 --memory=3g --memory-swap=3g 参数限制内存使用。

4.5 步骤5:编写并启动docker-compose.yml

目标 :定义容器网络、挂载、环境变量,启动OpenClaw。

操作

# 1. 返回工作目录
cd /volume1/docker/openclaw

# 2. 创建docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.8'

services:
  openclaw-gateway:
    image: openclaw:local
    container_name: openclaw-gateway
    restart: unless-stopped
    ports:
      - "18789:18789"
    environment:
      - OPENCLAW_CONFIG_DIR=/home/node/.openclaw
      - OPENCLAW_WORKSPACE_DIR=/home/node/.openclaw/workspace
      - OPENCLAW_AUTH_PROFILE_SECRET_DIR=/home/node/.config/openclaw
      - OPENCLAW_GATEWAY_BIND=lan
      - OPENCLAW_DISABLE_BONJOUR=1
      - OPENCLAW_SANDBOX=1
      - OPENCLAW_HOME_VOLUME=openclaw_home
    volumes:
      - ./config:/home/node/.openclaw:rw
      - ./workspace:/home/node/.openclaw/workspace:rw
      - ./auth-secret:/home/node/.config/openclaw:rw
      - ./logs:/tmp/openclaw:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
    extra_hosts:
      - "host.docker.internal:host-gateway"
    dns:
      - "127.0.0.1"
      - "192.168.1.1"
    networks:
      - openclaw-net

  openclaw-cli:
    image: openclaw:local
    container_name: openclaw-cli
    depends_on:
      - openclaw-gateway
    network_mode: "service:openclaw-gateway"
    entrypoint: ["sh", "-c"]
    command: ["sleep infinity"]
    volumes:
      - ./config:/home/node/.openclaw:rw
      - ./workspace:/home/node/.openclaw/workspace:rw
      - ./auth-secret:/home/node/.config/openclaw:rw

networks:
  openclaw-net:
    driver: bridge
EOF

# 3. 启动服务
docker compose up -d

验证命令

# 检查容器状态
docker compose ps
# 应显示openclaw-gateway和openclaw-cli均为"running"

# 检查日志是否有错误
docker logs openclaw-gateway 2>&1 | grep -i "error\|fail\|panic"
# 应无任何输出(静默即成功)

4.6 步骤6:执行交互式Onboarding与初始配置

目标 :生成API密钥、配置AI模型、启用核心插件。

操作

# 1. 运行onboarding(首次启动必做)
docker compose run --rm openclaw-cli onboard

# 2. 按提示输入:
#   - Provider: 选择ollama(若已安装Ollama)
#   - Model: 输入ollama模型名(如qwen2:7b)
#   - Gateway Token: 记下生成的token(后续需用)

# 3. 配置沙箱模式(关键!)
docker compose run --rm openclaw-cli config set \
  --batch-json '[{"path":"agents.defaults.sandbox.mode","value":"non-main"},{"path":"agents.defaults.sandbox.docker.image","value":"openclaw-sandbox:local"}]'

# 4. 启用文件管理插件
docker compose run --rm openclaw-cli plugins install @openclaw/file-manager

# 5. 重启网关使配置生效
docker compose restart openclaw-gateway

验证命令

# 检查配置是否写入
cat ./config/openclaw.json | jq '.agents.defaults.sandbox.mode'
# 应输出:"non-main"

# 检查插件是否安装成功
docker compose run --rm openclaw-cli plugins list | grep "file-manager"
# 应输出:@openclaw/file-manager (enabled)

4.7 步骤7:访问Control UI并测试首个Agent

目标 :通过Web界面验证部署成功,运行Hello World Agent。

操作

  1. 打开浏览器,访问 http://[NAS_IP]:18789 (如 http://192.168.1.100:18789 );
  2. 在Settings → Security中,粘贴步骤6中记下的 Gateway Token
  3. 进入Agents → Create New Agent;
  4. 填写:
    • Name: HelloWorld
    • Description: Test agent that writes to workspace
    • System Prompt: You are a helpful assistant. Write "Hello from NAS!" to the file /workspace/hello.txt.
  5. 点击Create,然后点击Run;
  6. 进入Workspace → Files,查看 hello.txt 是否生成。

验证结果

  • hello.txt 内容为 Hello from NAS! ,则部署100%成功;
  • 若报错 Permission denied ,检查步骤2的 chown 是否执行;
  • 若UI空白,检查步骤5的 ports 映射是否正确,及NAS防火墙是否放行18789端口。

5. 常见问题与排查技巧实录:NAS部署特有的12个高频故障

在超过50台不同型号NAS的部署实践中,我将问题按发生频率排序,整理成这张速查表。每个问题均附带 根本原因 一行命令诊断 三步修复法 ,拒绝模糊描述。

问题现象 根本原因 诊断命令 修复步骤
容器启动后立即退出, docker logs 为空 OPENCLAW_CONFIG_DIR 挂载路径权限错误,UID 1000无写入权 ls -ld ./config 1. sudo chown -R 1000:1001 ./config
2. sudo chmod -R 755 ./config
3. docker compose restart openclaw-gateway
Control UI显示"Unauthorized",Token无效 openclaw.json gateway.token 字段被覆盖,或 .env 文件未生成 cat ./config/.env | grep GATEWAY_TOKEN 1. rm ./config/.env
2. docker compose run --rm openclaw-cli onboard (重新执行)
3. 复制新Token到UI
Agent执行 shell 命令报错 command not found 沙箱容器内PATH未包含 /usr/local/bin curl 等命令不可用 docker exec openclaw-gateway sh -c "which curl" 1. 修改 Dockerfile.sandbox ,在 RUN 后添加 ENV PATH="/usr/local/bin:/usr/bin:/bin"
2. 重建沙箱镜像
3. docker compose restart openclaw-gateway
Ollama模型调用超时,日志显示 connect ECONNREFUSED 127.0.0.1:11434 NAS上Ollama监听 127.0.0.1 ,容器内 host.docker.internal 未解析 docker exec openclaw-gateway ping -c1 host.docker.internal 1. 在NAS上执行 echo "192.168.1.100 host.docker.internal" | sudo tee -a /etc/hosts
2. 重启Ollama服务
3. 重启OpenClaw
上传大文件(>100MB)时UI卡死或报错 413 Request Entity Too Large Nginx反向代理默认限制请求体大小 grep client_max_body_size /etc/nginx/nginx.conf 1. 编辑 /etc/nginx/nginx.conf ,在 http{} 块内添加 client_max_body_size 1024m;
2. sudo nginx -s reload
openclaw plugins install 报错 certificate has expired NAS系统证书过期,导致HTTPS请求失败 curl -v https://registry.npmjs.org 1. sudo ntpdate -s time.nist.gov (同步时间)
2. sudo cp /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-bundle.crt
3. 重启Docker服务
Agent调用 web-scraper 插件时Chrome启动失败 沙箱容器缺少 libnss3 库,Playwright无法加载Chromium docker exec openclaw-sandbox:local ldd /root/.cache/ms-playwright/chromium-*/chrome | grep "not found" 1. 修改 Dockerfile.sandbox RUN 命令改为 apt-get install -y libnss3
2. 重建镜像
3. 重启网关
docker compose up 报错 failed to solve: failed to read dockerfile NAS文件系统为NTFS或exFAT,不支持Linux文件权限 mount | grep volume1 1. 将工作目录移至Btrfs/ZFS卷(如 /volume2/docker/openclaw
2. 重新执行步骤2~5
UI中 Dashboard 链接显示 ws://172.x.x.x:18789 ,无法连接 gateway.bind 配置为 auto ,自动选择Docker内部IP cat ./config/openclaw.json | jq '.gateway.bind' 1. docker compose run --rm openclaw-cli config set --batch-json '[{"path":"gateway.bind","value":"lan"}]'
2. docker compose restart openclaw-gateway
Agent执行 file write 后,NAS上看不到文件 OPENCLAW_WORKSPACE_DIR 挂载路径错误,或容器内路径未映射 docker exec openclaw-gateway ls -l /home/node/.openclaw/workspace 1. 检查 docker-compose.yml volumes 路径是否为 ./workspace:/home/node/.openclaw/workspace
2. sudo chown -R 1000:1001 ./workspace
3. 重启网关
openclaw-cli 命令报错 EAI_AGAIN (DNS失败) openclaw-cli 容器被移除 NET_RAW 能力,DNS解析失败 docker exec openclaw-cli nslookup registry.npmjs.org 1. 创建 docker-compose.cli-no-dropped-caps.local.yml (见官方文档)
2. docker compose -f docker-compose.yml -f docker-compose.cli-no-dropped-caps.local.yml run --rm openclaw-cli plugins install xxx
部署后CPU持续100%, top 显示 node 进程占满 pnpm build 生成的JS文件有语法错误,Node进程无限重启 docker logs openclaw-gateway | tail -20 1. cd src && pnpm build (在NAS上本地构建)
2. 检查 dist/index.js 是否生成
3. 重新构建镜像

独家避坑技巧

  • 技巧1:备份黄金镜像 ——首次成功部署后,立即执行 docker save openclaw:local \| gzip > openclaw-nas-backup.tar.gz ,存至NAS其他卷。重装时 zcat openclaw-nas-backup.tar.gz \| docker load ,5分钟恢复。
  • 技巧2:沙箱内存限制 ——在 docker-compose.yml 中为沙箱容器添加 mem_limit: 1g ,防止Agent失控吃光NAS内存。
  • 技巧3:日志轮转 ——编辑 /etc/logrotate.d/docker-openclaw ,添加:
    /volume1/docker/openclaw/logs/*.log {
        daily
        missingok
        rotate 30
        compress
        delaycompress
        notifempty
    }
    

6. 进阶实战:3个真实NAS场景的Agent配置模板

部署完成只是起点。OpenClaw的价值在于将AI能力注入NAS的日常任务。以下是我在生产环境中稳定运行半年的3个高价值场景,每个都提供 完整配置JSON 触发方式 效果截图描述 ,可直接复制使用。

6.1 场景1:自动归档家庭会议录音(语音转文字+智能摘要)

痛点 :家人用手机录制家庭会议,音频文件散落在各处,手动转写耗时且易遗漏重点。

Agent配置 (保存为 ./config/agents/meeting-archiver/agent.json ):

{
  "id": "meeting-archiver",
  "name": "家庭会议归档员",
  "description": "监听/volume1/recordings目录,自动转写MP3并生成摘要",
  "systemPrompt": "你是一个专业的会议记录助手。请执行以下步骤:1. 使用@openclaw/file-manager插件列出/volume1/recordings目录下所有.mp3文件;2. 对每个新文件,调用@openclaw/whisper插件转写为文字;3. 用@openclaw/summarize插件生成300字以内摘要;4. 将原文和摘要保存为/volume1/notes/YYYY-MM-DD_会议名.md。",
  "tools": [
    "@openclaw/file-manager",
    "@openclaw/whisper",
    "@openclaw/summarize"
  ],
  "triggers": [
    {
      "type": "
Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐