La Plataforma Definitiva para Entrenar tus Habilidades de Hacking Ético
DockerLabs facilita el despliegue de laboratorios vulnerables en segundos usando el poder de los contenedores Docker.
Ligero, rápido y diseñado para la comunidad.
DockerLabs es una plataforma web open-source que permite a los usuarios desplegar, practicar y aprender ciberseguridad sin las complicaciones de configurar máquinas virtuales pesadas. Con un solo clic, puedes lanzar entornos vulnerables aislados, listos para ser explotados.
Olvídate de descargas de 4GB. DockerLabs levanta máquinas en milisegundos.
| 🐳 Eficiencia Docker | 🎯 Máquinas Variadas | 🤝 Comunidad |
|---|---|---|
| Entornos ultraligeros que consumen recursos mínimos. Levanta 10 laboratorios donde antes solo cabía una VM. | Desde máquinas Very Easy hasta retos Hard. Filtra por dificultad, fecha, creador y mucho más. | Sube tus propios Writeups, valora las máquinas y compite en el ranking global. |
Un stack robusto y moderno para garantizar rendimiento y escalabilidad.
DockerLabs sigue Versionado Semántico
(MAJOR.MINOR.PATCH) a partir de la v2.0.0. Cada release queda
etiquetada en git y documentada en CHANGELOG.md.
La versión desplegada se puede consultar en tres sitios, siempre
consistentes entre sí porque leen del mismo fichero VERSION:
- El pie de página de https://dockerlabs.es
- La etiqueta
<meta name="application-version">del<head> - El endpoint público
GET /api/version→{"version": "2.0.1"}
Este versionado permite, además, referenciar rangos de versiones
afectadas/corregidas en los avisos de seguridad (ver
SECURITY.md) y solicitar identificadores CVE para
vulnerabilidades confirmadas.
Si prefieres no depender de Docker, necesitas Python 3.13 y una base de datos MariaDB/MySQL accesible.
-
Clona el repositorio:
git clone https://github.com/Maalfer/dockerlabs.git cd dockerlabs -
Entorno virtual y dependencias:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txt -
Configura el entorno: copia
.env.examplea.envy rellena al menosDATABASE_URL(tu MariaDB) ySECRET_KEY. -
Arranca la app:
python3 run.py # desarrollo: puerto 5000, con autorecarga # o, en modo más parecido a producción: venv/bin/uvicorn asgi:app --host 0.0.0.0 --port 8000
El esquema de la base de datos se crea solo en el primer arranque.
Tip
Si quieres la vía más rápida y reproducible (sin instalar Python ni MariaDB a mano), usa Docker Compose — sección más abajo.
En producción, DockerLabs corre detrás de un reverse proxy (nginx o
Apache) con TLS, con la app servida vía uvicorn gestionado por systemd
y MariaDB como base de datos — el mismo proceso que arranca el paso 4 de
arriba, solo que supervisado por el sistema en vez de a mano.
El sistema de limitación de peticiones (Rate Limit) está configurado para funcionar con Cloudflare, proporcionando protección a nivel de red sin necesidad de servicios adicionales como memcached.
Regístrate normalmente desde la web y, con acceso a la base de datos:
mysql -u <usuario> -p dockerlabs \
-e "UPDATE users SET role='admin' WHERE username='TU_USUARIO';"(con Docker Compose, el comando equivalente está en esa sección, más abajo).
La forma más rápida de levantar DockerLabs, en local o en tu propio servidor: un solo comando levanta la app y su base de datos MariaDB.
-
Clona el repositorio y copia la configuración:
git clone https://github.com/Maalfer/dockerlabs.git cd dockerlabs cp .env.example .env -
Edita
.env: como mínimo cambiaDB_PASSWORD,DB_ROOT_PASSWORDySECRET_KEY(genera esta última conpython3 -c "import secrets; print(secrets.token_hex(32))"). El resto (SMTP, Discord) es opcional — sin SMTP configurado el registro de usuarios funciona igual, solo sin verificación por email. -
Levanta los contenedores:
docker compose up -d --build
La primera vez crea el esquema de la base de datos automáticamente. La app queda disponible en
http://localhost:8000(o el puerto que hayas puesto enAPP_PORT). -
Conviértete en admin (regístrate primero desde la web con tu usuario, luego):
docker compose exec db mariadb -u dockerlabs -p dockerlabs \ -e "UPDATE users SET role='admin' WHERE username='TU_USUARIO';"
(pide la contraseña de
DB_PASSWORDdel.env).
Los datos (imágenes subidas y base de datos) persisten en volúmenes
Docker (uploads_data, db_data) entre reinicios. Para pararlo:
docker compose down (añade -v solo si además quieres borrar los datos).
En CONTRIBUTING.md indicamos todos los detalles para poder contribuir en DockerLabs.

