OpenCode Docker サンドボックス

DaguのDockerサンドボックスからOpenCodeを実行する。

OpenCodeの非対話コマンドはopencode runです。opencodeバイナリとプロバイダ認証情報をランナーコンテナに入れ、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をマウントできます。

プロバイダ固有の環境変数をcontainer.envで渡すこともできます。

01

ランナーイメージ

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

動作確認

認証情報をマウントする前に、コンテナ内からOpenCodeのバージョンとバイナリパスを表示するshell providerを実行します。

バージョン確認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はプロバイダのログイン情報を~/.local/share/opencode/auth.jsonに保存し、環境変数やプロジェクトの.envからもプロバイダキーを読みます。選択したプロバイダに必要なものだけをマウントまたは渡します。

04

モデル名

OpenCodeのモデル名はprovider/model形式です。例ではanthropic/claude-sonnet-4-5を使っています。OpenCode設定で利用できるモデルに変更してください。