Saltar al contenido principal

Despliegue con Docker

Ejecute Sinaptic® DROID+ en producción con Docker. La imagen oficial es mínima (<15MB), se ejecuta como usuario no root e incluye una verificación de estado (healthcheck) integrada.

Imágenes

RegistroImagenComando pull
Docker Hub (principal)sinapticai/droiddocker pull sinapticai/droid:latest
GHCR (espejo)ghcr.io/sinapticai/droiddocker pull ghcr.io/sinapticai/droid:latest

Etiquetas: latest, 0.5.0, 0.5, 0 (semver), además de sha-<commit> para fijar una versión específica.

Inicio rápido

docker run -d \
--name droid \
-p 8080:8080 \
-p 8081:8081 \
-v ./droid.yaml:/etc/droid/droid.yaml \
-v ./configs/agents:/etc/droid/agents \
-e OPENAI_API_KEY=$OPENAI_API_KEY \
sinapticai/droid

Esto inicia Sinaptic® DROID+ con:

  • Puerto 8080: API compatible con OpenAI
  • Puerto 8081: API de gestión + Interfaz de usuario Agent Builder
  • Su configuración local y archivos de agentes montados en el contenedor
  • Clave API pasada a través de una variable de entorno

Configuración

El contenedor espera dos rutas:

RutaPropósitoPor defecto
/etc/droid/droid.yamlConfiguración de ejecuciónRequerido (monte el suyo propio)
/var/lib/droidDirectorio de datos (RAG, logs, auditoría)Creado automáticamente

Sobrescriba la ruta de configuración con DROID_CONFIG y el directorio de datos con las variables de entorno DROID_DATA_DIR.

Variables de entorno

Pase las claves API y las sobrescrituras a través de variables de entorno. El archivo de configuración admite la sintaxis ${VAR}:

docker run -d \
-e OPENAI_API_KEY=sk-... \
-e ANTHROPIC_API_KEY=sk-ant-... \
-e GEMINI_API_KEY=AIza... \
-e GROK_API_KEY=xai-... \
sinapticai/droid

Docker Compose

Para despliegues en producción, utilice Docker Compose:

# docker-compose.yml
version: "3.8"

services:
droid:
image: sinapticai/droid:latest
ports:
- "8080:8080" # API compatible con OpenAI
- "8081:8081" # API de gestión + Builder UI
volumes:
- ./droid.yaml:/etc/droid/droid.yaml:ro
- ./configs/agents:/etc/droid/agents:ro
- droid-data:/var/lib/droid
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
restart: unless-stopped
healthcheck:
test: ["/usr/local/bin/droid", "health", "--openai-port", "8080"]
interval: 30s
timeout: 3s
start_period: 5s
retries: 3

volumes:
droid-data:

Iniciar:

docker compose up -d

Verificaciones de estado (Health Checks)

El contenedor incluye una verificación de estado integrada que ejecuta droid health cada 30 segundos. También puede verificar el estado manualmente:

# Desde fuera del contenedor
curl http://localhost:8081/health

# Inspección de Docker
docker inspect --format='{{.State.Health.Status}}' droid

Recomendaciones para producción

Volúmenes

Monte su configuración como solo lectura (:ro) y use un volumen con nombre para los datos:

-v ./droid.yaml:/etc/droid/droid.yaml:ro
-v ./configs/agents:/etc/droid/agents:ro
-v droid-data:/var/lib/droid

Seguridad

El contenedor se ejecuta como no root por defecto (imagen distroless). Para mayor seguridad:

  • No exponga el puerto 8081 públicamente: la API de gestión y la interfaz Builder UI son para uso interno.
  • Utilice secretos de Docker o un depósito (vault) para las claves API en lugar de variables de entorno.
  • Habilite SinapticAI en modo de bloqueo para todos los agentes de producción.
# Solo exponga externamente el puerto de la API
ports:
- "8080:8080"
# Mantenga el puerto 8081 solo en la red interna

Límites de recursos

Sinaptic® DROID+ en sí mismo es ligero, pero las respuestas de LLM pueden consumir memoria durante el streaming. Mínimos recomendados:

deploy:
resources:
limits:
memory: 512M
cpus: "1.0"
reservations:
memory: 128M
cpus: "0.25"

Registro (Logging)

Sinaptic® DROID+ genera registros JSON estructurados en stdout por defecto. Captúrelos con su agregador de registros preferido:

logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"

Redes

Si ejecuta varias instancias de Sinaptic® DROID+ o se conecta a LLM locales (Ollama, LM Studio):

services:
droid:
# ... configuración de droid ...
networks:
- droid-net

ollama:
image: ollama/ollama:latest
networks:
- droid-net

networks:
droid-net:
driver: bridge

Luego haga referencia a Ollama por el nombre del servicio en droid.yaml:

ollama:
base_url: "http://ollama:11434/v1"

Actualización

docker pull sinapticai/droid:latest
docker compose up -d

El contenedor es sin estado (stateless): toda la configuración está en archivos montados y todos los datos están en el volumen. Puede reemplazar el contenedor de forma segura en cualquier momento.

Compilación desde la fuente

Si prefiere compilar la imagen de Docker usted mismo:

git clone https://github.com/SinapticAI/droid-community.git
cd droid-community
docker build -t droid:local .

Solución de problemas

El contenedor se cierra inmediatamente: Revise los registros con docker logs droid. Causa más común: falta el archivo droid.yaml o no es válido.

Falla la verificación de estado: Asegúrese de que el puerto 8080 sea accesible dentro del contenedor y que el archivo de configuración sea un YAML válido.

No se puede conectar al LLM local: Si Ollama o LM Studio se ejecutan en el host, use host.docker.internal en lugar de localhost:

ollama:
base_url: "http://host.docker.internal:11434/v1"

Permiso denegado en los volúmenes: El contenedor se ejecuta como no root. Asegúrese de que los directorios montados sean legibles por el UID 65534 (nobody).