OpenCode Docker 沙箱

从 Dagu Docker 沙箱运行 OpenCode。

OpenCode 的非交互命令是 opencode run。把 opencode 二进制和 provider 凭据放入 runner 容器,然后从 Dagu harness.run 步骤调用 provider: opencode。

Docker 中的 OpenCode 步骤
steps:
  - id: opencode_review
    action: harness.run
    container:
      image: dagu-opencode-runner:local
      pull_policy: never
      working_dir: /workspace
      volumes:
        - .:/workspace:ro
        - ${HOME}/.local/share/opencode:/root/.local/share/opencode:ro
    with:
      provider: opencode
      model: anthropic/claude-sonnet-4-5
      prompt: |
        Review this repository and summarize the highest-risk issues.

使用 opencode-ai npm 包安装 OpenCode。

模型调用前通过 Dagu 验证 opencode --version。

可挂载 ~/.local/share/opencode/auth.json 使用已配置 provider。

也可在 container.env 中使用 provider 专用环境变量。

01

Runner 镜像

在 runner 镜像中安装 OpenCode,并在构建时验证二进制。空 entrypoint 让 Dagu 控制命令。

Dockerfile
FROM node:22-bookworm-slim

RUN apt-get update \
  && apt-get install -y --no-install-recommends ca-certificates git bash \
  && rm -rf /var/lib/apt/lists/*

RUN npm install -g opencode-ai
RUN opencode --version

WORKDIR /workspace
ENTRYPOINT []
CMD ["bash"]
02

冒烟检查

挂载凭据前,先运行 shell provider,在容器内打印 OpenCode 版本和二进制路径。

版本检查 DAG
type: graph

harnesses:
  shell:
    binary: sh
    prefix_args:
      - -c
    prompt_mode: arg

steps:
  - id: opencode_version
    action: harness.run
    container:
      image: dagu-opencode-runner:local
      pull_policy: never
    with:
      provider: shell
      prompt: |
        set -eu
        opencode --version
        command -v opencode
03

凭据

OpenCode 将 provider 登录数据保存在 ~/.local/share/opencode/auth.json,也会从环境变量或项目 .env 中读取 provider key。只挂载或传递所选 provider 需要的内容。

04

模型名

OpenCode 模型名使用 provider/model 格式。示例使用 anthropic/claude-sonnet-4-5;请改成你的 OpenCode provider 配置中可用的模型。