「Claude Codeに自分のパソコンを触らせるのは少し怖い」 — そう感じたことはありませんか。私はあります。読み取りだけならいいのですが、書き込みや実行を任せる時、安全網がもう一段ほしくなる。

その時に出てくる選択肢が、Dockerでの実行です。この記事は、考え方と構成の勘所をまとめます。

Dockerに入れる理由は3つある

なぜDockerでわざわざ動かすのか。理由を整理すると、おおむね3つです。

ひとつめは、隔離。自分のパソコン本体を触らせず、コンテナの中だけで動かせば、誤った操作の被害がコンテナ内に留まります。

ふたつめは、サーバー上で動かす場面への対応。社内のサーバーやクラウド上で、無人運転に近い形でClaude Codeを動かしたい時、Dockerコンテナは扱いやすい単位です。

みっつめは、CI連携。GitHub ActionsのようなCIから呼び出して、定型作業を自動化する。コンテナで包んでおけば、CI環境とローカル環境の差が小さくなります。

ベースイメージはNode入りが定番

Claude Codeはnpmで配布されているので、Dockerイメージの中身もNode入りが基本です。

公式のNode.jsイメージを土台にして、その上でClaude Codeをグローバルインストールする、というのが定番の構成です。Dockerfileの骨格は10行に届かない短さで足りる。

FROM node:20
RUN npm install -g @anthropic-ai/claude-code
WORKDIR /workspace

ここではNode.jsの20系を使っていますが、22系でも問題ありません。軽さを重視するならslim系のバリエーションを選ぶ手もあります。CI用途で頻繁にビルドする場合、イメージサイズが効いてきます。

APIキーの渡し方が肝心

Dockerで動かす時、認証のクセを最初に押さえてください。

Claude Codeを定額プランで使う場合の認証は、ブラウザを開いて承認する流れが基本です。これがコンテナの中だと、ブラウザが起動できず詰まる。

実用的な解決は、APIキー方式に切り替えることです。ANTHROPIC_API_KEY をコンテナに環境変数として渡せば、ブラウザを介さず動かせます。APIキーの取得・設定そのものは別記事にまとめました。

docker run のたびに -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY のような形で注入する、というのが定番の渡し方です。

作業ファイルはマウントで共有する

コンテナの中だけで完結する作業もありますが、たいていは「ホスト側のフォルダをClaudeに触らせたい」が要望のはずです。

その場合、ホストのフォルダをコンテナにマウントします。

docker run -v $(pwd):/workspace -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY my-claude-image

ホスト上の作業フォルダが、コンテナ内のworkspaceから見えるようになります。Claude Codeはコンテナ内のworkspaceを編集しますが、その変更はホスト側のファイルにそのまま反映されます。

マウントの範囲を絞れば、Claudeが触れる場所を物理的に限定できる、というのが大事な点です。プロジェクトフォルダだけマウントしておけば、ホームディレクトリ全体は触らせない、といった制御が可能になります。

サンドボックスとして使う場面

私が最近よくやっているのは、新しい操作を試す前にコンテナで実験する使い方です。

たとえば、これまで使ったことのないコマンドや、自動的に多数のファイルを書き換えそうな指示。本番のフォルダで一発勝負する前に、コンテナで同じ作業をやってもらう。期待どおりに動けば本番へ、ヘンな結果なら捨てる。コンテナごと捨てればきれいに戻せます。

権限の考え方は別記事に整理してあるので、コンテナと組み合わせて重ね方を読むと整理しやすいです。

ハマりやすいところ

最後に、私が引っかかったポイントを書きます。

ひとつは、コンテナ内のシェル環境の貧しさ。標準のイメージは最小限なので、エディタやよく使うコマンドが入っていません。Claude Codeに「vimで開いて」のような指示を出すと、入っていないと言われて止まる。必要なツールはDockerfileに RUN apt-get install -y ... で足しておく。

もうひとつは、ファイルの所有者問題。コンテナ内のrootで作業した結果、ホスト側に書かれたファイルの所有者がrootになり、ホスト側で編集できないことがあります。これは --user オプションでホストと同じUIDを指定するか、Dockerfileで非rootユーザーを作って解決します。

最初の数回はこれらに当たるはずですが、一度知ってしまえば回避できる類の話です。

まとめ

  • Dockerで動かす理由は、隔離・サーバー実行・CI連携の3つ
  • ベースはNode入りの公式イメージで十分
  • 認証はAPIキー方式に切り替え、ANTHROPIC_API_KEY を環境変数で渡す
  • ホストのフォルダをマウントして、触らせる範囲を物理的に絞れる
  • 新しい操作の試行はコンテナを使い捨てサンドボックスとして使うと安全
  • 最小イメージのツール不足とファイル所有者問題は、初回に必ず一度あたる