在 docker 容器内的配置文件目录在是:Config overwrite: /root/.openclaw/openclaw.json
docker的 dockerfile 配置挂载目录有问题,现在的问题是.openclaw配置在:/home/node/.openclaw, 实际上的容器内.openclaw配置路径是:/root/.openclaw
详细步骤 步骤 1:创建构建目录结构 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 mkdir -p /home/ubuntu/docker-buildcd /home/ubuntu/docker-buildcp -r /home/ubuntu/openclaw/* .mkdir -p openclaw-defaultscp -r /home/ubuntu/.openclaw/extensions openclaw-defaults/cp -r /home/ubuntu/.openclaw/workspace openclaw-defaults/cp -r /home/ubuntu/.openclaw/cron openclaw-defaults/cp -r /home/ubuntu/.openclaw/canvas openclaw-defaults/
步骤 2:创建初始化脚本 init-openclaw.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 #!/bin/bash set -eOPENCLAW_HOME="/root/.openclaw" DEFAULTS_DIR="/opt/openclaw-defaults" echo "[init-openclaw] Starting initialization..." echo "[init-openclaw] OPENCLAW_HOME: $OPENCLAW_HOME " mkdir -p "$OPENCLAW_HOME " if [ -d "$DEFAULTS_DIR /extensions/metis" ]; then mkdir -p "$OPENCLAW_HOME /extensions" if [ ! -d "$OPENCLAW_HOME /extensions/metis" ]; then echo "[init-openclaw] Copying Metis plugin..." cp -r "$DEFAULTS_DIR /extensions/metis" "$OPENCLAW_HOME /extensions/" echo "[init-openclaw] Metis plugin copied successfully." else echo "[init-openclaw] Metis plugin already exists, skipping..." fi else echo "[init-openclaw] Warning: Default Metis plugin not found at $DEFAULTS_DIR /extensions/metis" fi mkdir -p "$OPENCLAW_HOME /agents" mkdir -p "$OPENCLAW_HOME /logs" mkdir -p "$OPENCLAW_HOME /delivery-queue" mkdir -p "$OPENCLAW_HOME /devices" mkdir -p "$OPENCLAW_HOME /completions" mkdir -p "$OPENCLAW_HOME /memory" echo "[init-openclaw] Initialization complete, starting OpenClaw..." exec "$@ "
步骤 3:创建 Dockerfile.custom 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 FROM node:22-bookworm@sha256:cd7bcd2e7a1e6f72052feb023c7f6b722205d3fcab7bbcbd2d1bfdab10b1e935 LABEL org.opencontainers.image.title="OpenClaw-Custom" \ org.opencontainers.image.description="OpenClaw gateway with Metis plugin" \ org.opencontainers.image.version="2026.3.2-custom" RUN apt-get update && \ apt-get install -y --no-install-recommends gosu net-tools && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* ENV OPENCLAW_PREFER_PNPM=1 RUN corepack enable WORKDIR /app RUN chown node:node /app COPY --chown =node:node package.json pnpm-lock.yaml pnpm-workspace.yaml ./ RUN echo "# pnpm build-script allowlist lives in package.json -> pnpm.onlyBuiltDependencies." > .npmrc && chown node:node .npmrc COPY --chown =node:node ui/package.json ./ui/package.json COPY --chown =node:node patches ./patches COPY --chown =node:node scripts ./scripts USER node RUN NODE_OPTIONS=--max-old-space-size=2048 pnpm install --frozen-lockfile USER root USER node COPY --chown =node:node . . RUN rm -rf /app/openclaw-defaults || true RUN for dir in /app/extensions /app/.agent /app/.agents; do \ if [ -d "$dir " ]; then \ find "$dir " -type d -exec chmod 755 {} +; \ find "$dir " -type f -exec chmod 644 {} +; \ fi ; \ done RUN pnpm build RUN pnpm ui:build USER root RUN mkdir -p /opt/openclaw-defaults/extensions COPY openclaw-defaults/extensions/metis/ /opt/openclaw-defaults/extensions/metis/ RUN chmod -R 755 /opt/openclaw-defaults COPY --chmod =755 init-openclaw.sh /usr/local/bin/init-openclaw.sh RUN ln -sf /app/openclaw.mjs /usr/local/bin/openclaw && \ chmod 755 /app/openclaw.mjs ENV NODE_ENV=production HEALTHCHECK --interval=3m --timeout =10s --start-period=15s --retries=3 \ CMD node -e "fetch('http://127.0.0.1:18789/healthz').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))" ENTRYPOINT ["/usr/local/bin/init-openclaw.sh" ] CMD ["node" , "openclaw.mjs" , "gateway" , "--bind" , "lan" , "--allow-unconfigured" ]
步骤 4:构建 Docker 镜像 1 2 3 4 5 6 7 cd /home/ubuntu/docker-builddocker build -f Dockerfile.custom -t openclaw-custom:2026.3.2 . docker tag openclaw-custom:2026.3.2 openclaw-custom:latest
1 2 3 4 5 6 7 8 9 10 11 12 13 14 mkdir -p /tmp/openclaw-testdocker run --rm -it \ -p 18789:18789 \ -v /tmp/openclaw-test:/home/node/.openclaw \ -e OPENCLAW_GATEWAY_BIND=lan \ openclaw-custom:latest ls -la /tmp/openclaw-test/ls -la /tmp/openclaw-test/extensions/ls -la /tmp/openclaw-test/workspace/
步骤 5:推送到腾讯云 TCR 1 2 3 4 5 6 7 8 9 10 docker login ccr.ccs.tencentyun.com --username=<你的腾讯云账号ID> docker tag openclaw-custom:2026.3.2 ccr.ccs.tencentyun.com/<命名空间>/openclaw:2026.3.2 docker tag openclaw-custom:2026.3.2 ccr.ccs.tencentyun.com/<命名空间>/openclaw:latest docker push ccr.ccs.tencentyun.com/<命名空间>/openclaw:2026.3.2 docker push ccr.ccs.tencentyun.com/<命名空间>/openclaw:latest
docker 内部 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 nohup openclaw gateway > /tmp/openclaw.log 2>&1 &docker run -it \ -p 18889:18789 \ -p 8888:8888 \ -v /home/ubuntu/docker_config/test1:/root/.openclaw \ -e OPENCLAW_GATEWAY_BIND=lan \ openclaw-custom:latest-fix bash docker run -d \ -p 18889:18789 \ -p 8888:8888 \ -v /home/ubuntu/docker_config/test1:/root/.openclaw \ -e OPENCLAW_GATEWAY_BIND=lan \ openclaw-custom:latest-fix