Claude Code Docker サンドボックス

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

Claude Codeをランナーイメージにインストールし、claudeバイナリを確認して、必要なステップだけに認証情報を渡します。Daguはスケジュール、ログ、リトライ、コンテナ境界をYAMLで管理します。

Docker内のClaude Codeステップ
steps:
  - id: claude_review
    action: harness.run
    container:
      image: dagu-claude-runner:local
      pull_policy: never
      working_dir: /workspace
      volumes:
        - .:/workspace:ro
      env:
        - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
    with:
      provider: claude
      model: sonnet
      prompt: |
        Review this repository and summarize the highest-risk issues.

公式の@anthropic-ai/claude-code npmパッケージを使います。

モデル呼び出し前にDagu経由でclaude --versionを確認します。

ANTHROPIC_API_KEYをcontainerステップの境界で渡します。

認証情報の範囲に応じてルートレベルまたはステップレベルcontainerを選べます。

01

ランナーイメージ

Claude CodeはNode.js 18以降でグローバルnpmパッケージとしてインストールできます。この例ではNode 22を使い、イメージビルド中にバイナリを確認します。

Dockerfile
FROM node:22-bookworm-slim

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

RUN npm install -g @anthropic-ai/claude-code
RUN claude --version

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

動作確認

まずshell providerで、Claudeへプロンプトを送らずにイメージとバイナリパスを確認します。

バージョン確認DAG
type: graph

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

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

認証情報

単純な非対話実行ではANTHROPIC_API_KEYをコンテナに渡します。他のClaude Code認証方法も、必要なファイルや環境変数が同じコンテナ内にあれば使えます。

04

コンテナの範囲

単発のClaude Codeタスクにはステップレベルcontainerを優先します。前段のbuildやtestも同じイメージで実行してからClaude Codeがworkspaceを読む場合だけ、ルートレベルcontainerを使います。