Backend para ejecutar código Java de forma segura usando Docker.
- Node.js 18+
- Docker instalado y corriendo
- npm o yarn
- Instalar dependencias:
npm install- Construir la imagen Docker:
npm run docker:build- Verificar que la imagen se creó:
npm run docker:checknpm run devnpm run build
npm startEl servidor estará disponible en http://localhost:3001
Health check del servicio.
Response:
{
"status": "ok",
"service": "java-playground-backend"
}Verifica que Docker esté disponible y la imagen lista.
Response:
{
"dockerAvailable": true,
"imageReady": true,
"message": "Docker image ready"
}Ejecuta código Java en un contenedor aislado.
Request:
{
"code": "public class Main {\n public static void main(String[] args) {\n System.out.println(\"Hello World!\");\n }\n}"
}Response (exitoso):
{
"success": true,
"output": "Hello World!\n",
"executionTime": 1234
}Response (error):
{
"success": false,
"error": "Main.java:2: error: ';' expected",
"executionTime": 567
}El código se ejecuta con las siguientes restricciones:
- Timeout: 5 segundos máximo
- Memoria: Límite de 128MB
- CPU: 0.5 cores
- Red: Deshabilitada (
--network none) - Procesos: Máximo 50 procesos
- Usuario: No privilegiado dentro del contenedor
- Sistema de archivos: Solo lectura
# Reconstruir imagen Docker
npm run docker:build
# Ver imágenes Docker
npm run docker:check
# Limpiar contenedores huérfanos
docker container prune
# Ver logs de contenedores
docker ps -acurl -X POST http://localhost:3001/execute \
-H "Content-Type: application/json" \
-d '{
"code": "public class Main { public static void main(String[] args) { System.out.println(\"Hello from Java!\"); } }"
}'Cliente HTTP
↓
Express Server (index.ts)
↓
JavaDockerExecutor (javaExecutor.ts)
↓
Docker Container (java-runner:latest)
↓
[Compilar + Ejecutar Java]
↓
Resultado
Ejecuta: npm run docker:build
Asegúrate de que Docker está corriendo: docker ps
Agrega tu usuario al grupo docker: sudo usermod -aG docker $USER