Sentō 自带一个 Dockerfile,在容器里给你和 VPS 完全对等的体验:非 root 的 sento 用户、容器内的 @reboot cron 持久化、Guardian 和 Claude Code 一起跑。

前提条件

  • Docker 24+
  • 一个 Claude Code OAuth token — 由于 Docker 是非交互运行的,浏览器认证流程无法工作。先在本地机器上生成 token:npm install -g @anthropic-ai/claude-code && claude setup-token。以 sk-ant-oat01-… 开头。
  • 你选的频道的 bot token

构建镜像

git clone https://github.com/sentoagent/sento
cd sento
docker build -t sento .

镜像以非 root 的 sento 用户运行(Claude Code 拒绝以 root 身份使用 --dangerously-skip-permissions),并把 npm 的 global 包放在 ~/.npm-global 下。

用环境变量跑

docker run -d \
  --name sento-agent \
  -e CLAUDE_CODE_OAUTH_TOKEN="sk-ant-oat01-..." \
  -e DISCORD_BOT_TOKEN="你的-bot-token" \
  -e AGENT_NAME="kai" \
  -e CHANNEL="discord" \
  -v sento-data:/home/sento/workspace \
  sento

把工作区挂成 volume,这样 CLAUDE.md、记忆和凭证能在容器重启后保留。

Docker Compose(多智能体)

超过一个智能体时用 Compose:

version: "3.9"
services:
  kai:
    image: sento
    environment:
      - CLAUDE_CODE_OAUTH_TOKEN=${CLAUDE_TOKEN}
      - DISCORD_BOT_TOKEN=${KAI_DISCORD_TOKEN}
      - AGENT_NAME=kai
      - CHANNEL=discord
    volumes:
      - kai-data:/home/sento/workspace
  mira:
    image: sento
    environment:
      - CLAUDE_CODE_OAUTH_TOKEN=${CLAUDE_TOKEN}
      - TELEGRAM_BOT_TOKEN=${MIRA_TG_TOKEN}
      - AGENT_NAME=mira
      - CHANNEL=telegram
    volumes:
      - mira-data:/home/sento/workspace

volumes:
  kai-data:
  mira-data:

检查健康

docker exec -it sento-agent sento status
docker exec -it sento-agent sento logs -n 40

或者进 shell,像 VPS 一样用:

docker exec -it sento-agent bash

为什么 Docker 对等很重要

在 VPS 上能跑的每个功能在 Docker 里都能跑:Guardian、cron @reboot、tmux、完整的 CLI、智能体互通配对。没有"精简模式"。容器运行方式和 Linux 用户完全一致。