Instalar y exponer n8n en Windows 11 con Docker y ngrok (Guía paso a paso 2026)
Tabla de contenidos
Parte 0 — Requisitos
- Windows 11
- Docker Desktop instalado
- WSL2 activo
- Ngrok instalado y con token configurado:
ngrok config add-authtoken TU_TOKEN
Comprobar:
docker --version
wsl --version
ngrok version
Parte 1 — Crear proyecto
En PowerShell:
mkdir %USERPROFILE%\docker\n8n-win
cd %USERPROFILE%\docker\n8n-win
mkdir n8n-data
Parte 2 — Dockerfile (completo)
Crea un archivo llamado Dockerfile con este contenido:
FROM debian:12
RUN apt-get update && apt-get install -y \
curl gnupg ca-certificates \
python3 libreoffice \
&& rm -rf /var/lib/apt/lists/*
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \
apt-get install -y nodejs && \
npm install -g n8n
ENV TZ=Europe/Madrid
RUN useradd -m -u 1000 -s /bin/bash node && \
mkdir -p /home/node/.n8n && chown -R 1000:1000 /home/node
USER 1000:1000
WORKDIR /home/node
CMD ["n8n", "start"]
Parte 3 — docker-compose.yml (completo)
Crea docker-compose.yml:
services:
n8n:
build: .
ports:
- "5678:5678"
environment:
- GENERIC_TIMEZONE=Europe/Madrid
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=admin123
- WEBHOOK_URL=${WEBHOOK_URL}
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
volumes:
- ./n8n-data:/home/node/.n8n
Parte 4 — Script start.ps1 (ngrok + n8n + .env automático)
Crea start.ps1 con este contenido:
$ErrorActionPreference = "Stop"
Write-Host "Cerrando ngrok si estaba abierto..."
Get-Process ngrok -ErrorAction SilentlyContinue | Stop-Process -Force
Write-Host "Iniciando ngrok..."
Start-Process ngrok "http http://localhost:5678" -WindowStyle Hidden
Write-Host "Esperando a que ngrok esté listo..."
$NGROK_URL = $null
for ($i = 1; $i -le 15; $i++) {
try {
$resp = Invoke-RestMethod "http://localhost:4040/api/tunnels"
if ($resp.tunnels -and $resp.tunnels.Count -gt 0) {
$NGROK_URL = $resp.tunnels[0].public_url
}
if ($NGROK_URL -and $NGROK_URL.StartsWith("https://")) {
break
}
} catch {
}
Start-Sleep -Seconds 1
}
if (-not $NGROK_URL) {
Write-Error "No se pudo obtener la URL de ngrok"
exit 1
}
Write-Host "Ngrok activo en: $NGROK_URL"
"WEBHOOK_URL=$NGROK_URL" | Out-File -Encoding ascii ".env"
Write-Host "Arrancando n8n con Docker Compose..."
docker compose up
Parte 5 — Build y arranque
En la carpeta del proyecto:
docker compose build --no-cache
powershell -ExecutionPolicy Bypass -File .\start.ps1
Parte 6 — Acceso
- n8n:
http://localhost:5678 - Usuario:
admin - Password:
admin123 - Panel de ngrok:
http://localhost:4040
La URL pública queda guardada en el archivo .env como WEBHOOK_URL.
Parte 7 — Parar todo
En la consola:
- CTRL + C
Luego:
docker compose down
Troubleshooting (importante para el tutorial)
1) Docker se queda en “Starting the Docker Engine…”
Casi siempre es virtualización / hipervisor de Windows.
Comprobar:
- Administrador de tareas → Rendimiento → CPU
Debe poner: Virtualización: Habilitada
Si está habilitada y aun así Docker dice:
Virtualization support not detected
Ejecutar en PowerShell como administrador:
bcdedit /set hypervisorlaunchtype auto
Reiniciar Windows y abrir Docker Desktop otra vez.
2) Error: “open //./pipe/dockerDesktopLinuxEngine”
Significa que Docker Desktop no está arrancado.
Solución:
- Abrir Docker Desktop
- Esperar a que esté “Running”
- Volver a lanzar
start.ps1
3) WSL no funciona bien
En PowerShell como admin:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
wsl --set-default-version 2
wsl --update
Reiniciar Windows.
4) Comprobar estado
wsl -l -v
docker info
Qué aprenden los alumnos con este tutorial
- Usar n8n de forma profesional con Docker
- Persistencia de datos con volúmenes
- Qué es y para qué sirve WEBHOOK_URL
- Exponer servicios locales con ngrok
- Automatizar arranque con scripts en Windows
- Diagnosticar problemas reales de virtualización en Windows