2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DockerのOpenCode sandboxで、さくらのAI Engineに接続する手順

2
Last updated at Posted at 2026-02-19

概要

Docker Desktop v4.61.0Docker Sandboxes (※Experimental=実験的機能) が v0.12.0 となり、従来の Claude、Copilot、Gemini 等のサンドボックスに加えて、新たに Shell や OpenCode がサポートされました。

Docker Sandboxesは、macOS や Windows (WSL2) に既に存在する Docker Engine とは別の仮想マシン環境を作成し、そこでエージェントなどを安全に動かすための仕組みです1 。具体的には、共有していないホスト側のディレクトリは一切見えないものの、ストレージ領域はリアルタイムに共有できたり、HTTP/HTTPS以外の通信はデフォルトで遮断したり、特定のネットワークに対する通信の許可・拒否ができます2。通信状況をチェックする機能もあるため、意図しない通信を遮断したり確認するのにも役立ちます。

Agentic Codingに興味はあっても、エージェントがローカルPC上のどこにアクセスしているか、あるいはリモートのどこにアクセスしているか不安な方には良い選択肢となるのではないでしょうか。

この記事は、「オープンソースのAIコーディングエージェント」であるOpenCode のバックエンドとして、さくらの AI Engine を使う手順です。

なお、v4.61.0 であれば Windows 版でも macOS 版でも動作します(v4.61.0 から Docker Sandbox が WSL2 にも対応したため)。macOS 版はテンプレートイメージのダウンロード後、直ちに実行できます。一方で Windows 版のsandboxでは、ダウンロード後の起動に数分かかる模様です。

事前準備

さくらの AI Engine でアクセストークンを取得します。
また、Docker Desktop もインストールしておきます。
PC上の空き容量を確保します(最低20GB程度の空き容量 ※MicroVM起動用。sandboxごとに容量を消費)

手順概要

OpenCode は起動時に opencode.json ファイルを読み込み、どのサービスや言語モデルを利用するか選択できます。以降の手順では、OpenAI 互換プロバイダ(※プロバイダとは、OpenAI 用語でいうところの「接続先」)としてさくらの AI Engine のエンドポイントを自動で選択し、すぐに始められるようにしています。

手順

1. 作業ディレクトリの作成と opencode.json の設置

docker sandbox 実行時、指定するディレクトリから上の階層は、サンドボックス内のコンテナから一切アクセスできません。そのため、特に必要がなければ何も無いディレクトリを作成し、そこを docker sandbox run 実行時に指定します。

ディレクトリを作成したら opencode.json ファイルを作成します。※ファイル中の apiKeyのところにある「アクセストークン」と書かれた部分は、さくらの AI Engine のアクセストークンを記入します3

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "sakura": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Sakura AI Engine",
      "options": {
        "baseURL": "https://api.ai.sakura.ad.jp/v1",
        "apiKey": "アクセストークン"
      },
      "models": {
        "Qwen3-Coder-480B-A35B-Instruct-FP8": {
          "name": "Qwen3 Coder 480B",
          "limit": { "context": 131072, "output": 32768 }
        },
        "Qwen3-Coder-30B-A3B-Instruct": {
          "name": "Qwen3 Coder 30B",
          "limit": { "context": 131072, "output": 32768 }
        },
        "gpt-oss-120b": {
          "name": "gpt-oss 120B",
          "limit": { "context": 131072, "output": 16384 }
        },
        "Qwen3-0.6B": {
          "name": "Qwen3 0.6B",
          "limit": { "context": 32768, "output": 8192 }
        }
      }
    }
  },
  "model": "sakura/Qwen3-Coder-480B-A35B-Instruct-FP8",
  "small_model": "sakura/Qwen3-0.6B"
}

補足説明として「model」はデフォルトのモデル指定ですが、さくらの AI Engine で提供されている他のモデルを選んでも構いません。また「small_model」は会話のタイトル生成用に使われるモデルで、これも指定しておきますが、もちろん任意のものを指定できます。

2. sandbox の起動

準備が調ったら、サンドボックスを作成・実行します。以下は実行例です。 opencode.json ファイルがあるディレクトリで次のように実行します。

docker sandbox run --name opencode-sakura \
    opencode \
    .

ここでは「opencode-sakura」という名前でサンドボックスを作成し、opencode エージェントのテンプレートを指定し、かつ「.」(カレント)をサンドボックスのルート(/)ディレクトリとして起動します。「.」ではなくパスも指定可能です。

コマンドを実行するとテンプレート(となる仮想マシンイメージ)のダウンロードが始まりますので、完了まで待ちます。

Creating new sandbox 'opencode-sakura'...
opencode: Pulling from docker/sandbox-templates
541fbd16e24d: Pull complete 
3ae7223b1852: Downloading  233.8MB/313.7MB
f26bc5f649c1: Download complete 
892759a3787c: Pull complete 
3e9b45097209: Pull complete 
6b876dc0922b: Pull complete 
2818c2aed47e: Pull complete 
b7c6402f8f1a: Pull complete 
6d6423d518c6: Pull complete 
39c8bc892f6e: Pull complete 
2dc16832e916: Pull complete 
0322e0a272d6: Pull complete 
e50b443489e9: Download complete 
33d0208e1afa: Download complete 

しばらく待つと、次のような OpenCode の画面が起動します。

image.png

画面真ん中下に「Quen3 Coder 480B Sakura AI Engine」と出ていれば正常です。

あとは適当に文字を入力したら、そのまま使えます。

image.png

もし認証に失敗するようであれば /connect と入力して OpenCode を手動で認証することもできます。

なお /exit と入力すると終了します。

docker sandbox ls コマンドを実行すると、(MicroVMが)実行中のままです。

% docker sandbox ls
SANDBOX           AGENT      STATUS    WORKSPACE
opencode-sakura   opencode   running   /Users/zem/develop/docker-sandbox/opencode-sakura

使わない場合は

docker sandbox stop opencode-sakura

コマンドで停止できます。停止後は再び docker sandbox run opencode-sakura を実行すると再開出来ます。

あとは docker sandbox network log コマンドを実行すると、sandbox内からどこにアクセスしているか、アクセス先や時間も確認できます。

Blocked requests:
SANDBOX                HOST                 RULE                  LAST SEEN         COUNT
opencode-sakura        169.254.169.254:80   169.254.0.0/16        22:12:38 19-Feb   2
shell-docker-sandbox   1.1.1.1              <icmp proxy policy>   21:13:34 19-Feb   5

Allowed requests:
SANDBOX                HOST                                   RULE                     LAST SEEN         COUNT
opencode-sakura        api.ai.sakura.ad.jp:443                <default policy>         23:28:15 19-Feb   22
opencode-sakura        registry.npmjs.org:443                 registry.npmjs.org:443   23:26:36 19-Feb   1134
opencode-sakura        models.dev:443                         <default policy>         23:26:31 19-Feb   22
opencode-sakura        production.cloudflare.docker.com:443   *.docker.com:443         23:25:15 19-Feb   128
opencode-sakura        registry-1.docker.io:443               *.docker.io:443          23:25:15 19-Feb   176
opencode-sakura        auth.docker.io:443                     *.docker.io:443          23:25:13 19-Feb   8

docker.io は Docker、 api.ai.sakura.ad.jp は さくらの AI Engine。models.dev にもモデル情報を取得するためアクセスしているようですね。

3. sandbox の削除

使い終わったら docker sandbox rm コマンドでサンドボックスを消せます。

$ docker sandbox ls
SANDBOX           AGENT      STATUS    WORKSPACE
opencode-sakura   opencode   stopped   /Users/zem/develop/docker-sandbox/opencode-sakura

このように opencode-sakura というサンドボックスは停止中(stopped)とされますが、仮想マシン用にディスク容量は消費しつづけます。不要であれば docker sandbox rm で消します。

$ docker sandbox rm opencode-sakura
Deleting sandbox opencode-sakura...
✓ Sandbox opencode-sakura removed successfully

面倒なら docker sandbox reset で全消しするのもありです。

ちなみに、調子に乗って docker sandbox run を続けていると次のようなエラーが出ますが、これが出たらストレージの容量不足でしょう。

failed to create sandbox: create sandbox: create sandbox: run sandbox: apply definition hook: pull handler: failed to copy: failed to send write: write /var/lib/desktop-containerd/daemon/io.containerd.content.v1.content/ingest/a90b4f319c0f801b34478948d9d0288f131759ed1959f968918abde2db68628b/data: input/output error

こういうときは docker sandbox reset が楽ですが、全部消えてしまうので、不要なものだけ消したい場合は docker sandbox rm で1つ1つ作業するのが良さげです。

Enjoy!

参考

  1. https://docs.docker.com/ai/sandboxes/architecture/

  2. https://docs.docker.com/ai/sandboxes/network-policies/

  3. Docker Sandboxes がサポートしているエージェント(AnthropicやOpenAIなど)はproxy-managedを通して環境変数をサンドボックス内に渡す方法があります。ですが、さくらの AI Engine のようなプロバイダは対象外のため、現状はファイルを直書きするか、OpenCode 起動後に /connect を実行する必要があります。ここでは手順を簡易化するため、直接ファイルに書き込んでいます。もしGitを使う場合は.gitignoreに opencode.json を付けるなど対処が必要です。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?