wsl-labs GitHub

🔍 Auditoría técnica — WSL Container Center#

Fecha: 2026-07-06 Alcance: giro a contenedores con wslc — panel Node.js (:9092), motor WSLC, launcher Windows (Go), 12 casos portados de docker-labs Estado: los 12 casos verificados corriendo — ver registro más abajo

🎯 Objetivo#

wsl-labs giró de "servicios dentro de la distro" a contenedores reales con WSLC, el motor de contenedores nativo de WSL 2.9+ (preview). Esta auditoría documenta con honestidad qué se verificó al portar los 12 casos de docker-labs, cómo se comprobó cada uno y qué límites tiene el enfoque hoy.

🗺️ Esquema#

graph LR
    Cfg["containers.config.json"] --> Build["wslc build (custom)"]
    Cfg --> Net["red wslc (platform/obs)"]
    Build --> Up["wslc run -p host:container"]
    Net --> Up
    Up --> Verify["verificación HTTP + DB"]
    Verify --> Ok["12/12 corriendo"]

✅ Verificación de los 12 casos#

Cada caso se levantó con wslc y se comprobó desde Windows. El criterio de "sano" depende del servicio (no todo es HTTP 200):

CasoPuertoComprobaciónResultado
01-node-api8101GET / → HTTP 200 (JSON)
03-python-api8102GET / → HTTP 200 (JSON)
10-go-api8103GET / → HTTP 200 (JSON)
06-nginx-web8104GET / → HTTP 200 (HTML)
04-redis-cache8105GET / → HTTP 200 + Redis reachable
05-postgres-api8106GET / → HTTP 200 + PostgreSQL reachable
02-php-lamp8107GET / → HTTP 200 + MariaDB reachable
09-multi-service8112GET / → HTTP 200 + MongoDB reachable
07-rabbitmq8109panel admin → HTTP 200/302
08-prometheus-grafana8110/8111Grafana 302 (login), Prometheus 200
11-elasticsearch8113GET / → HTTP 200 (JSON del clúster)
12-jenkins8114GET / → HTTP 403 (setup protegido → vivo)
HTTP 403 en Jenkins y 302 en Grafana/RabbitMQ no son fallos: son la respuesta esperada de un servicio vivo con autenticación o setup inicial. Marcar "sano" solo por 200 daría falsos negativos en esos casos.

🧩 Multi-contenedor + red wslc (verificado)#

Los cuatro casos platform y el de observabilidad no son un solo contenedor: son app + backend conectados por una red wslc creada para el caso. Se verificó que:

accesible dentro de la red del caso.

por IP ni por localhost.

CasoRedBackend (interno)La app apunta a
04-redis-cachewslc-redis-netwslc-redisREDIS_HOST=wslc-redis
05-postgres-apiwslc-pg-netwslc-postgresPG_HOST=wslc-postgres
02-php-lampwslc-lamp-netwslc-mariadbDB_HOST=wslc-mariadb
09-multi-servicewslc-multi-netwslc-mongoMONGO_HOST=wslc-mongo
08-prometheus-grafanawslc-obs-netwslc-prometheusGrafana consume Prometheus

Verificado: la resolución por nombre en la red wslc funciona — las apps alcanzan su base de datos y devuelven HTTP 200, lo que confirma que el backend está reachable a través de la red del contenedor.


🔨 wslc build desde Dockerfile (verificado)#

Las imágenes wsl-labs/* no son oficiales: se construyen con wslc build desde un Dockerfile propio en el contexto del caso.

CasoImagen customBaseNota
01-node-apiwsl-labs/node-apinode:20-alpinehttp nativo, sin npm install
03-python-apiwsl-labs/python-apipython:3.12-alpineFlask con deps en build
10-go-apiwsl-labs/go-apimulti-stagecompila y copia binario a imagen mínima
06-nginx-webwsl-labs/nginx-webnginx:alpinecontenido estático
04-redis-cachewsl-labs/redis-appNodecliente Redis
05-postgres-apiwsl-labs/pg-appPythoncliente PostgreSQL
02-php-lampwsl-labs/php-lampPHP+Apachecliente MariaDB
09-multi-servicewsl-labs/multi-backendNodecliente MongoDB

Verificado: wslc build -t <imagen> containers/<caso> produce una imagen que aparece en wslc images y se levanta con wslc run. El caso 10-go-api confirma el soporte de builds multi-stage (compilar en una capa, copiar el binario a otra).


🌐 Mapa de puertos — verificado, sin conflictos#

PuertoCasoServicioEstado
9092🧭 WSL Container Center (Node.js, Windows)
810101🟢 API Node✅ 200
810203🐍 API Python✅ 200
810310🐹 API Go✅ 200
810406🌐 Nginx web✅ 200
810504🟢 App + Redis✅ 200
810605🗄️ API + PostgreSQL✅ 200
810702🐘 LAMP + MariaDB✅ 200
810907🐰 RabbitMQ (panel)✅ 200/302
8110/811108📊 Grafana / Prometheus✅ 302 / 200
811209🍃 Backend + MongoDB✅ 200
811311🔍 Elasticsearch✅ 200
811412🧰 Jenkins✅ 403 (vivo)

Resultado verificado (v0.3.0): los 12 casos construidos/levantados con wslc y respondiendo desde Windows — 12/12 corriendo.


⚠️ Notas honestas y límites conocidos#

WSLC está en preview#

comportamiento del motor pueden cambiar entre builds de WSL.

instalación lo tiene en otra ruta, el motor no se detecta.

una red wslc y varios wslc run. Es más verboso que un docker-compose.yml.

Casos pesados: Elasticsearch y Jenkins#

~1.2 GB en la práctica. No lo levantes con 4 GB de RAM.

403 (setup inicial) — es la señal de que está vivo, no un error.

8 GB. Ver referencia de runtime.

Verificación manual, no en CI#

reproducible en los runners estándar de CI sin virtualización anidada.

hay tests unitarios de la detección de distro/motor.


📁 Alcance y límites de diseño#

sobre WSL 2.9+, no a despliegue remoto.

windows-installer.md.

provee (ver windows-installer.md).


🔗 Documentos relacionados#

Fuente: docs/technical-audit.md