OpenCode Docker は再現可能な実行環境、file 境界、local model の経路が必要な場合に役立ちます。container だから安全なのではなく、image、mount、credential、network、権限、書き込み前の証拠を確認して安全性を作ります。
最初の結論:目的に合う Docker 経路を選ぶ
Docker Sandbox は管理された隔離 workspace に向いています。どの file を mount するか、どの provider に code が送られるか、どの権限があるかを確認します。
Docker Model Runner は model service を提供し、OpenCode は coding interface のままです。service が動いても project mount や権限は設定されません。
独自 image は Node や package を固定できますが、Dockerfile、user、更新、secret の管理が必要です。
Docker の構成経路と違い
`opencode docker image`、`opencode docker compose`、`docker opencode` は同じ設定意図の変形です。別ページにはせず表で比較します。
単一 repository なら CLI が動き provider に接続できる最小 image から始めます。追加 service や home の mount は後にします。
model の privacy が目的なら inference service と coding agent を分けて記録します。endpoint は mount と権限確認の代わりになりません。
| 経路 | 用途 | 確認する境界 |
|---|---|---|
| Docker Sandbox | 隔離 workspace の検証 | 認証、mount、sandbox 権限 |
| Docker Model Runner | local/private model | model、endpoint、port、context |
| 独自 Docker image | 固定 tool と team 再現 | Dockerfile、user、更新、secret |
| Docker Compose | 複数 service | service、network、volume、cleanup |
container で OpenCode を動かす前に
source code を mount する前に image の出所を確認します。公式資料または Dockerfile、base、更新履歴を確認できるものを選びます。
対象 project だけを mount し、home、SSH key、cloud credential、host の Docker socket は避けます。
credential は実行時に渡し、Dockerfile、layer、Git の Compose、shell history には書きません。`.dockerignore` も確認します。
小さな repository で読み取り、文書や fixture の小変更、Git diff、production に触れない test を行います。
安定した OpenCode Docker 構成の 7 チェック
チェックを順番に行うと起動結果が証拠になります。model が無ければ endpoint、file が違えば mount、write が広ければ権限を調べます。
Laptop と CI で同じ順番を使い、image、provider、path、command を記録します。
応答できても安全とは限りません。mutable image、広い volume、host access が残ることがあります。
- image を確認 名前、tag/digest、base、更新元、container user を記録します。
- workspace を狭くする project だけを mount し、別 branch または worktree を使います。
- provider を接続 endpoint を検証し、鍵は image と repository の外に置きます。
- model を確認 container 内で応答、ID、context、port を確認します。
- 読み取り task 変更前に file の要約を依頼します。
- 小さな diff 文書や fixture だけを変更し、無関係な file を拒否します。
- cleanup を記録 container を停止し、一時 volume を削除して修正を残します。
Docker Model Runner と OpenAI 互換 endpoint
Docker Model Runner は local または private inference に使えます。coding model を用意し、同じ network から応答を確認して URL と ID を使います。
endpoint test と OpenCode test を分け、context、権限、session を確認します。
interface と port を限定し、host gateway、Compose service 名、remote server のどれかを記録します。
# Illustrative shape only; confirm current image, endpoint, and model fields in official docs
docker run --rm -it --mount type=bind,src="$PWD",dst=/workspace --workdir /workspace -e OPENAI_API_KEY -e OPENAI_BASE_URL opencode-image:reviewed opencode権限、secret、port、Git の安全
container の境界は権限モデルの一部です。OpenCode、Docker、Linux user、provider、Git の条件をそろえます。
最小 command、cleanup、volume、private port、image の再現方法を共有します。
最初の write は README の一行や fixture など小さくし、project 外の file が出たら止めます。
| 確認 | 安全寄りの初期値 | 危険信号 |
|---|---|---|
| secret | runtime 注入と rotation | Dockerfile、layer、Compose に鍵 |
| file | 一つの project、non-root、worktree | home、SSH、Docker socket |
| network | 必要な endpoint と port のみ | 全 port 公開または public endpoint |
| Git | write 後に status と diff | worktree 外への write |
| image | 確認済み digest/tag | owner のない `latest` |
トラブルシュート:失敗した層を分ける
`opencode` が無ければ provider を変える前に image、PATH、entrypoint、user を確認します。
model が空なら container 内から endpoint を試し、URL、DNS、port、credential、ID を確認します。`localhost` は container 自身かもしれません。
編集が違う場合は mount と task を小さくし、権限を確認して読み取りからやり直します。digest、model、diff を残します。
| 症状 | 疑う層 | 最初の確認 |
|---|---|---|
| command が無い | image または PATH | 同じ image と workdir で version |
| provider に model が無い | endpoint または ID | container 内で test し ID を比較 |
| file が無い | mount または workdir | workdir と project を表示 |
| timeout | network、port、quota、model | 短い request |
| 予期しない file | mount、権限、task | 停止し Git を確認、mount を縮小 |
OpenCode Docker よくある質問
OpenCode は Docker コンテナ で動きますか?
動きます。ただし image、project mount、credential、network、command 権限を確認してください。
Docker Sandbox と独自 image は?
管理された隔離は Sandbox、固定依存を保守できる場合は独自 image です。
Docker Model Runner に接続するには?
service を確認し、公式の OpenAI 互換 base URL と model ID を同じ network から使います。
何を mount しますか?
対象 project または worktree だけにし、home、SSH key、credential、Docker socket は避けます。
Compose は必須ですか?
必須ではありません。複数 service を private network で再現する場合に使います。
model が見えない理由は?
base URL、container 内 localhost、ID、port、key、service 名を確認します。
確認する公式資料
統合仕様は変わります。敏感な repository で command を使う前に、公式資料で image、認証、endpoint、権限を確認してください。