メインコンテンツに直接移動

Dockerランタイム

これは、OpenHandsを起動する際にデフォルトで使用されるランタイムです。

イメージ

nikolaikからのSANDBOX_RUNTIME_CONTAINER_IMAGEは、ランタイムサーバーと、PythonとNodeJSの基本的なユーティリティを含む事前ビルドされたランタイムイメージです。 独自のランタイムイメージを構築することもできます。

ファイルシステムへの接続

便利な機能の一つは、ローカルファイルシステムに接続する機能です。ランタイムにファイルシステムをマウントするには:

SANDBOX_VOLUMESの使用

ローカルファイルシステムをマウントする最も簡単な方法は、SANDBOX_VOLUMES環境変数を使用することです:

docker run # ...
-e SANDBOX_USER_ID=$(id -u) \
-e SANDBOX_VOLUMES=/path/to/your/code:/workspace:rw \
# ...

SANDBOX_VOLUMESのフォーマットは:host_path:container_path[:mode]

  • host_path:マウントしたいホストマシン上のパス
  • container_path:ホストパスがマウントされるコンテナ内のパス
    • エージェントに変更させたいファイルには/workspaceを使用します。エージェントはデフォルトで/workspaceで作業します。
    • 読み取り専用の参照資料や大きなデータセットには、別のパス(例:/data)を使用します。
  • mode:オプションのマウントモード、rw(読み書き、デフォルト)またはro(読み取り専用)

カンマ(,)で区切ることで、複数のマウントを指定することもできます:

export SANDBOX_VOLUMES=/path1:/workspace/path1,/path2:/workspace/path2:ro

例:

# LinuxとMacの例 - 書き込み可能なワークスペース
export SANDBOX_VOLUMES=$HOME/OpenHands:/workspace:rw

# Windows上のWSLの例 - 書き込み可能なワークスペース
export SANDBOX_VOLUMES=/mnt/c/dev/OpenHands:/workspace:rw

# 読み取り専用の参照コードの例
export SANDBOX_VOLUMES=/path/to/reference/code:/data:ro

# 複数マウントの例 - 書き込み可能なワークスペースと読み取り専用の参照データ
export SANDBOX_VOLUMES=$HOME/projects:/workspace:rw,/path/to/large/dataset:/data:ro

注意: 複数のマウントを使用する場合、最初のマウントが主要なワークスペースと見なされ、単一のワークスペースを想定するツールとの後方互換性のために使用されます。

重要: エージェントはデフォルトで/workspaceで作業します。エージェントにローカルディレクトリ内のファイルを変更させたい場合は、そのディレクトリを/workspaceにマウントする必要があります。エージェントにアクセスさせたいが変更させたくない読み取り専用データがある場合は、別のパス(/dataなど)にマウントし、エージェントにそこを見るよう明示的に指示してください。

WORKSPACE_*変数の使用(非推奨)

注意: この方法は非推奨であり、将来のバージョンで削除される予定です。代わりにSANDBOX_VOLUMESを使用してください。

  1. WORKSPACE_BASEを設定します:

    export WORKSPACE_BASE=/path/to/your/code
  2. docker runコマンドに以下のオプションを追加します:

    docker run # ...
    -e SANDBOX_USER_ID=$(id -u) \
    -e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \
    -v $WORKSPACE_BASE:/opt/workspace_base \
    # ...

注意してください!OpenHandsエージェントがワークスペースにマウントされたファイルを削除または変更することを防ぐものは何もありません。

-e SANDBOX_USER_ID=$(id -u)はDockerコマンドに渡され、サンドボックスユーザーがホストユーザーの権限と一致するようにします。これにより、エージェントがマウントされたワークスペースにroot所有のファイルを作成することを防ぎます。

強化されたDockerインストール

セキュリティが優先される環境でOpenHandsをデプロイする場合、強化されたDockerの設定を検討すべきです。このセクションでは、デフォルト設定を超えてOpenHandsのDockerデプロイメントを保護するための推奨事項を提供します。

セキュリティの考慮事項

READMEのデフォルトのDocker設定は、ローカル開発マシンでの使いやすさを考慮して設計されています。公共ネットワーク(例:空港のWiFi)で実行している場合は、追加のセキュリティ対策を実施する必要があります。

ネットワークバインディングのセキュリティ

デフォルトでは、OpenHandsはすべてのネットワークインターフェース(0.0.0.0)にバインドし、ホストが接続しているすべてのネットワークにインスタンスを公開する可能性があります。より安全な設定のために:

  1. ネットワークバインディングの制限runtime_binding_address設定を使用して、OpenHandsがリッスンするネットワークインターフェースを制限します:

    docker run # ...
    -e SANDBOX_RUNTIME_BINDING_ADDRESS=127.0.0.1 \
    # ...

    この設定により、OpenHandsはループバックインターフェース(127.0.0.1)のみでリッスンし、ローカルマシンからのみアクセス可能になります。

  2. ポートバインディングの保護-pフラグを変更して、すべてのインターフェースではなくlocalhostにのみバインドします:

    docker run # ... \
    -p 127.0.0.1:3000:3000 \

    これにより、OpenHandsのWebインターフェースはローカルマシンからのみアクセス可能になり、ネットワーク上の他のマシンからはアクセスできなくなります。

ネットワーク分離

Dockerのネットワーク機能を使用してOpenHandsを分離します:

# 分離されたネットワークを作成
docker network create openhands-network

# 分離されたネットワークでOpenHandsを実行
docker run # ... \
--network openhands-network \