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 opencode03
凭据
OpenCode 将 provider 登录数据保存在 ~/.local/share/opencode/auth.json,也会从环境变量或项目 .env 中读取 provider key。只挂载或传递所选 provider 需要的内容。
04
模型名
OpenCode 模型名使用 provider/model 格式。示例使用 anthropic/claude-sonnet-4-5;请改成你的 OpenCode provider 配置中可用的模型。