コンテンツにスキップ

エグゼキュータ

コマンドエグゼキュータは制御された環境で外部プロセスを実行します。2つのエグゼキュータタイプが利用可能:ネイティブOSプロセスとDockerコンテナ。

種別説明
exec.nativeホストOS上で直接コマンドを実行
exec.dockerDockerコンテナ内でコマンドを実行

ホストオペレーティングシステム上で直接コマンドを実行します。

- name: shell
kind: exec.native
default_work_dir: /app
default_env:
PATH: /usr/local/bin:/usr/bin:/bin
LANG: en_US.UTF-8
command_whitelist:
- git status
- git diff
- npm run build
フィールドデフォルト説明
default_work_dirstring-すべてのコマンドの作業ディレクトリ
default_envmap-環境変数(コマンドごとのenvとマージ)
command_whiteliststring[]-設定された場合、これらの正確なコマンドのみ許可
ネイティブエグゼキュータはデフォルトでクリーンな環境を使用します。明示的に設定された環境変数のみが子プロセスに渡されます。

分離されたDockerコンテナ内でコマンドを実行します。

- name: sandbox
kind: exec.docker
image: python:3.11-slim
default_work_dir: /workspace
network_mode: none
memory_limit: 536870912
cpu_quota: 50000
auto_remove: true
read_only_rootfs: true
no_new_privileges: true
cap_drop:
- ALL
tmpfs:
/tmp: rw,noexec,nosuid,size=64m
volumes:
- /app/data:/workspace/data:ro
フィールドデフォルト説明
imagestring必須使用するDockerイメージ
hoststringunixソケットDockerデーモンURL
default_work_dirstring-コンテナ内の作業ディレクトリ
default_envmap-環境変数
command_whiteliststring[]-許可されるコマンド(完全一致)
network_modestringbridgeネットワークモード:hostbridgenone
volumesstring[]-ボリュームマウント:host:container[:ro]
userstring-コンテナ内で実行するユーザー
memory_limitint0メモリ制限(バイト、0 = 無制限)
cpu_quotaint0CPUクォータ(100000 = 1 CPU、0 = 無制限)
auto_removeboolfalse終了後にコンテナを削除
read_only_rootfsboolfalseルートファイルシステムを読み取り専用に
no_new_privilegesboolfalse権限昇格を防止
cap_dropstring[]-削除するLinuxケーパビリティ
cap_addstring[]-追加するLinuxケーパビリティ
pids_limitint0最大プロセス数(0 = 無制限)
tmpfsmap-書き込み可能パス用のtmpfsマウント

両方のエグゼキュータタイプがコマンドホワイトリストをサポート。設定された場合、完全一致のコマンドのみ許可されます:

command_whitelist:
- ls -la
- cat /etc/passwd

ホワイトリストにないコマンドはエラーで拒否されます。

Execモジュールがコマンド実行を提供します:

local exec = require("exec")
local executor, err = exec.get("app:shell")
if err then return nil, err end
local proc = executor:exec("git status", {
work_dir = "/app/repo"
})
local stdout = proc:stdout_stream()
proc:start()
local output = stdout:read()
proc:wait()
stdout:close()
executor:release()