Ir al contenido

Ejecutor

Los ejecutores de comandos ejecutan procesos externos con entornos controlados. Dos tipos de ejecutores están disponibles: procesos nativos del SO y contenedores Docker.

TipoDescripción
exec.nativeEjecutar comandos directamente en el SO host
exec.dockerEjecutar comandos dentro de contenedores Docker

Ejecuta comandos directamente en el sistema operativo host.

- 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
CampoTipoPor DefectoDescripción
default_work_dirstring-Directorio de trabajo para todos los comandos
default_envmap-Variables de entorno (combinadas con env por comando)
command_whiteliststring[]-Si se establece, solo estos comandos exactos están permitidos
Los ejecutores nativos usan un entorno limpio por defecto. Solo las variables de entorno configuradas explícitamente se pasan a los procesos hijos.

Ejecuta comandos dentro de contenedores Docker aislados.

- 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
CampoTipoPor DefectoDescripción
imagestringrequeridoImagen Docker a usar
hoststringsocket unixURL del demonio Docker
default_work_dirstring-Directorio de trabajo dentro del contenedor
default_envmap-Variables de entorno
command_whiteliststring[]-Comandos permitidos (coincidencia exacta)
network_modestringbridgeModo de red: host, bridge, none
volumesstring[]-Montajes de volumen: host:contenedor[:ro]
userstring-Usuario para ejecutar dentro del contenedor
memory_limitint0Límite de memoria en bytes (0 = ilimitado)
cpu_quotaint0Cuota de CPU (100000 = 1 CPU, 0 = ilimitado)
auto_removeboolfalseRemover contenedor después de salir
read_only_rootfsboolfalseHacer sistema de archivos raíz de solo lectura
no_new_privilegesboolfalsePrevenir escalación de privilegios
cap_dropstring[]-Capacidades Linux a eliminar
cap_addstring[]-Capacidades Linux a agregar
pids_limitint0Procesos máximos (0 = ilimitado)
tmpfsmap-Montajes tmpfs para rutas con escritura

Ambos tipos de ejecutores soportan lista blanca de comandos. Cuando se configura, solo coincidencias exactas de comando están permitidas:

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

Los comandos que no están en la lista blanca se rechazan con un error.

El Módulo Exec proporciona ejecución de comandos:

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()