Serie N8N (VII): Instalar N8N con Docker – del local al servidor sin miedo
- 17 ene
- 11 Min. de lectura
Hasta ahora hemos trabajado con N8N instalado directamente en nuestro ordenador. Eso está muy bien para aprender, pero cuando empezamos a pensar en:
servidores,
VPS,
despliegues estables,
o mover N8N de un sitio a otro,
aparece una herramienta clave: Docker.
En este capítulo vamos a instalar N8N dentro de Docker, pero sin salir del entorno local, para aprender el mismo método que se usa después en producción.

1. Por qué usar Docker con N8N
Docker resuelve muchos problemas de golpe:
no dependes de versiones de Node.js,
no “rompes” tu sistema,
puedes parar y arrancar N8N en segundos,
puedes mover la instalación a otro ordenador o servidor.
Además, N8N está pensado para usarse en Docker, especialmente en servidores.
2. Qué es Docker (explicado para humanos)
Docker permite ejecutar aplicaciones dentro de contenedores.
Un contenedor no es una máquina virtual completa, ni algo complicado. Es más bien como un paquete cerrado que incluye:
la aplicación,
sus dependencias,
su configuración,
y todo lo necesario para que funcione igual en cualquier sitio.
En lugar de instalar N8N “a pelo” en tu sistema, Docker lo ejecuta en un entorno aislado y controlado.
Una forma sencilla de entenderlo
Piensa en Docker como una caja:
dentro está N8N,
fuera está tu ordenador,
ambos se comunican, pero no se molestan.
Eso significa que:
no importa tu sistema operativo,
no importa la versión de Node.js,
no importa si luego lo llevas a un VPS.
👉 Si funciona en Docker aquí, funcionará igual en otro sitio.

Por qué esto es tan útil para N8N
N8N es una herramienta que suele estar:
siempre encendida,
ejecutando workflows,
integrándose con muchas cosas.
Docker facilita:
actualizaciones limpias,
copias de seguridad,
mover N8N de local a servidor,
y evitar “dependencias rotas”.
Por eso casi todas las instalaciones “serias” de N8N usan Docker.
3. Instalar Docker Desktop
El primer paso para poder ejecutar N8N en Docker es instalar Docker Desktop en tu equipo.
Docker Desktop es una aplicación que:
instala Docker en tu sistema,
gestiona los contenedores,
y te ofrece una interfaz visual para ver qué está pasando.
Está disponible para Windows, macOS y Linux.
Descarga de Docker Desktop
La descarga se hace desde la web oficial: 👉 https://www.docker.com/products/docker-desktop/
En la página verás el botón de descarga adaptado a tu sistema operativo. Docker tiene varios planes, pero para uso personal es gratuito.
Para poder descargarlo te tendrás que haber registrado previamente en la web de docker

Proceso de instalación
El instalador es muy sencillo: descargas el archivo, lo ejecutas, aceptas las opciones por defecto y finalizas la instalación.
Nota importante para usuarios de Windows: virtualización y WSL2
Si usas Windows, Docker Desktop necesita dos cosas para funcionar correctamente:
Virtualización activada
WSL2 (Windows Subsystem for Linux)
Vamos a ver qué es cada una, de forma sencilla.
¿Qué es la virtualización?
La virtualización permite que tu ordenador ejecute sistemas aislados dentro de él, como si fueran pequeños ordenadores independientes.
Docker usa esta capacidad para crear contenedores, aislar aplicaciones y ejecutar entornos Linux dentro de Windows.
👉 En la mayoría de equipos modernos, la virtualización ya existe, pero a veces está desactivada en la BIOS.
Cómo comprobarlo rápidamente: abre el Administrador de tareas, ve a la pestaña Rendimiento, en CPU, busca el texto: "Virtualización: Habilitada" (Si aparece como habilitada, no tienes que hacer nada más).
¿Qué es WSL2 y por qué Docker lo necesita?
WSL2 significa Windows Subsystem for Linux (versión 2).
En la práctica, es una forma oficial y muy eficiente de ejecutar Linux dentro de Windows, sin usar máquinas virtuales pesadas y con muy buen rendimiento.
Docker Desktop usa WSL2 para:
ejecutar contenedores Linux,
de forma rápida y estable,
sin que tengas que instalar Linux manualmente.
👉 Aunque estés en Windows, N8N se ejecutará en un entorno Linux, igual que en un servidor VPS real.
¿Tengo que instalar WSL2 a mano?
En la mayoría de casos Docker Desktop lo instala y configura automáticamente, o te guía paso a paso si algo falta. Si Docker detecta que WSL2 no está activo, te mostrará un aviso, te indicará qué activar, y te pedirá reiniciar el equipo.
Primer arranque de Docker Desktop
Una vez instalado, abre Docker Desktop.
La primera vez puede tardar un poco:
Docker está configurando servicios internos,
iniciando el motor de contenedores,
y preparando el entorno.
Cuando todo está listo, Docker Desktop quedará en estado Running.

4. Verificar que Docker funciona
Antes de ejecutar N8N dentro de Docker, conviene asegurarnos de que Docker está funcionando bien.
Esta comprobación evita problemas más adelante y te permite saber que el entorno está listo.
Comprobación desde Docker Desktop
Abre Docker Desktop. Si todo está correcto, deberías ver:
Docker en estado Running
Sin mensajes de error
El panel principal accesible
No es necesario tener ningún contenedor en ejecución todavía. Si Docker Desktop está abierto y no muestra errores, ya es buena señal.
Comprobación opcional desde la terminal
Si quieres una verificación adicional (opcional, pero recomendable), abre una terminal y ejecuta:
docker --versionSi Docker está correctamente instalado, verás algo parecido a:
Docker version 28.x.x, build xxxxxEsto confirma que:
Docker está instalado,
el comando funciona,
y el motor está accesible desde el sistema.

Prueba rápida (opcional): contenedor de prueba
Si quieres ir un paso más allá, puedes ejecutar un contenedor de prueba muy simple:
docker run hello-world
Este comando:
descarga una imagen pequeña,
ejecuta un contenedor,
y muestra un mensaje confirmando que Docker funciona.
Si ves el mensaje de éxito, puedes estar totalmente tranquilo.

5. Ejecutar N8N con Docker (primer contenedor)
Vamos a ver como se haría usando el entorno visual de Docker Desktop y también como se haría usando un terminal
5.A Usando Docker Desktop
5.A1 Crear el volumen de datos (persistencia)
Antes de arrancar N8N en Docker, vamos a crear un volumen de datos. Esto es clave para que tu instalación sea persistente, es decir, para que no pierdas nada cuando pares o reinicies el contenedor.
Un contenedor Docker es, por defecto, “temporal”: se crea, funciona, y cuando lo borras… lo que había dentro desaparece. Y dentro de N8N hay cosas muy importantes: tu usuario y contraseña, tus workflows, tus credenciales (APIs, tokens, etc.), tus configuraciones. Si todo eso vive dentro del contenedor y el contenedor se elimina o se recrea, lo pierdes.
Un volumen es la solución a esto. 👉 Un volumen es como un “disco duro” separado del contenedor: vive fuera del contenedor, no se borra al reiniciar, y puedes reutilizarlo aunque el contenedor cambie.
N8N guarda su estado (usuarios, workflows, credenciales…) en una carpeta interna:
/home/node/.n8n
Si montamos un volumen en esa ruta, conseguimos que:
✅ si paras N8N y lo vuelves a arrancar, todo sigue igual
✅ si actualizas N8N, no pierdes nada
✅ si mueves la instalación a un VPS, puedes replicar la misma estructura
Pasos para crear el volumen de datos:
Dentro de docker desktop vamos a la sección "volumes" y pulsamos en "Create a volume"

le vamos a dar el nombre "n8n_data" y lo creamos

5.A2 Descargamos imagen n8n y creamos contanier
Creamos un
Dentro de Docker Desktop vamos a "Docker-Hub" y ahí en buscar ponemos "n8n"
De las opciones que nos salen seleccionamos "n8nio/n8n"

Se nos abrirá una página donde explica que contiene esta imagen, y mucha más información de interés.
Pulsamos sobre "Pull" y con eso se descargará la imagen correspondiente al n8n
La descargará tardará un poco ya que en nuestro caso ha sido un archivo de 1Gb
En la sección "Images" podremos ver la imagen descargada

Imagen n8n descargada Ahora en propia sección "images" pulsamos "Run" sobre la imagen descargada "n8nio/n8n" y con esto ya estaríamos arrancando un docker de n8n
Al darle a "run" nos deja configurar algunos parámetros.
Container name: le ponemos un nombre al contenedor, por ejemplo "n8n" (si lo dejamos en blanco, se le asignara un nombre automáticamente).
Port: indicamos puesto que le asignaremos. Vamos a darle el 5678 que es el puerto por defecto de n8n (si ponemos 0 se asignará un número de puerto aleatorio)
Volumes: usamos el volumen que acabamos de crear:
host path = n8n_data
container path: /home/node/.n8n
Environment variables:
variable: GENERIC_TIMEZONE, valor: Europe/Madrid
El valor es tu zona horaria. Para saber cual te corresponde visita este enlace: "https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List"
variable: TZ, valor: Europe/Madrid
variable: N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS, valor: true
variable: N8N_RUNNERS_ENABLED, valor: true

Damos a Run y se abre la sección container y se crea el contenedor
En este caso vemos como, una vez arrancado, nos indica que el Editor de n8n es accesible a través del puerto 5678

Si volvemos a la sección "containers" podemos ver que este contenedor está ejecutándose y ahí mismo lo podríamos detener.

5.A3 Acceder a N8N
Abrir el navegador y acceder a N8N. Abre: 👉 http://localhost:5678
5.B Usando un Terminal
Para esta sección, nos basaremos en la documentación oficial de n8n
5.B1 Crear el volumen de datos (persistencia)
Crear el volumen: abre un terminal y ejecuta este comando una sola vez:
docker volume create n8n_data
n8n_data es el nombre del volumen
Docker lo creará y lo mantendrá disponible hasta que tú lo borres manualmente
¿Cómo se usa luego ese volumen?
En el comando de arranque (apartado 5.B2) verás esta parte:
-v n8n_data:/home/node/.n8n
Significa:
“conecta el volumen n8n_data”
“a la carpeta /home/node/.n8n dentro del contenedor”
A partir de ahí, N8N guardará todo lo importante en el volumen.
5.B2 Arrancar el contenedor de N8N (comando oficial explicado paso a paso)
Una vez creado el volumen de datos, ya podemos arrancar N8N dentro de Docker usando el comando recomendado oficialmente por n8n. Este comando no solo arranca N8N:define cómo se comporta, dónde guarda datos y cómo ejecuta tareas.
El comando completo
Sustituye <YOUR_TIMEZONE> por tu zona horaria. Consulta el valor de tu zona en este enlace: "https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List". En España, lo habitual es: "Europe/Madrid".
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-e GENERIC_TIMEZONE="Europe/Madrid" \
-e TZ="Europe/Madrid" \
-e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
-e N8N_RUNNERS_ENABLED=true \
-v n8n_data:/home/node/.n8n \
docker.n8n.io/n8nio/n8n
Ahora vamos a explicar línea por línea:
--name n8n
Asigna un nombre legible al contenedor. Esto hace más fácil identificarlo en Docker Desktop o desde terminal.
--name n8n
Indica que el contenedor se elimina automáticamente cuando se detiene. Esto no borra tus datos, porque los datos viven en el volumen n8n_data, no dentro del contenedor.
-p 5678:5678
Puerto de acceso. Conecta:
el puerto 5678 del contenedorcon:
el puerto 5678 de tu ordenador
Gracias a esto, puedes acceder a N8N desde: 👉 http://localhost:5678
Zona horaria (muy importante para automatizaciones)
-e TZ="Europe/Madrid"
Define la zona horaria del sistema dentro del contenedor.
-e GENERIC_TIMEZONE="Europe/Madrid"
Define la zona horaria que usan los nodos orientados a tiempo.
-e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
Esta opción obliga a N8N a usar permisos seguros en sus archivos de configuración. Es especialmente importante cuando usas volúmenes, compartes datos entre sistemas, o piensas mover esto a un VPS más adelante. Es una buena práctica recomendada por n8n.
-e N8N_RUNNERS_ENABLED=true
Habilita los task runners, que es el sistema recomendado actualmente por n8n para ejecutar workflows.
Ventajas: mejor rendimiento, ejecución más robusta, base para escalado futuro.
-v n8n_data:/home/node/.n8n
Esta línea conecta el volumen Docker n8n_data con la carpeta interna donde N8N guarda todo lo importante. Gracias a esto puedes parar y arrancar N8N, actualizar la imagen y mover el contenedor, sin perder absolutamente nada.
Esta es la imagen oficial de N8N, mantenida por el propio equipo del proyecto.
Usar la imagen oficial garantiza versiones correctas, compatibilidad, y soporte con la documentación.
Ahora ejecutamos ese código. Lo hemos ejecutado en PowerShell en lugar de una terminal
docker run -it --rm --name n8n -p 5678:5678 -e GENERIC_TIMEZONE="Europe/Madrid" -e TZ="Europe/Madrid“ -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true -e N8N_RUNNERS_ENABLED=true -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

5.B3 Acceder a N8N
Una vez ejecutado el comando del apartado anterior, Docker hará varias cosas de forma automática:
Descargará la imagen oficial de N8N (si no la tenías).
Creará el contenedor con la configuración indicada.
Conectará el volumen n8n_data para la persistencia.
Iniciará el servidor de N8N dentro del contenedor.
Al final del todo aparecerá un mensaje tipo:
Editor is now accessible via: http://localhost:5678Ese mensaje significa que el contenedor está en ejecución, N8N ha arrancado correctamente, y ya está escuchando peticiones en el puerto 5678.
👉 En este punto no tienes que hacer nada más en la terminal. Déjala abierta mientras N8N esté en marcha.
Qué NO hacer en este momento:
❌ No cierres la terminal (detendría el contenedor).
❌ No ejecutes el comando otra vez.
❌ No esperes que se abra nada automáticamente.
Docker está funcionando correctamente aunque “no pase nada más” en la terminal.
Qué SÍ hacer ahora
El siguiente paso ya no es técnico, es visual: abrir el navegador y acceder a N8N.
Abre: 👉 http://localhost:5678

6. Acceder a N8N desde el navegador
Con el contenedor en marcha, abre tu navegador y entra en:
Verás exactamente la misma interfaz de N8N que ya conoces. Esto confirma que N8N está corriendo dentro de Docker, no en tu sistema.

Si es tu primer acceso, tendrás que configurar tu cuenta. Esto ya vimos como hacerlo en el primer artículo de esta serie: "Serie N8N (I): Automatiza tu mundo. Definición e instalación en local".
Si ya has usado N8N antes, notarás algo importante: 👉 la interfaz es exactamente la misma. La diferencia no está en lo que ves, sino en cómo está ejecutándose por debajo:
ahora N8N vive dentro de Docker,
con persistencia,
y preparado para moverse a un VPS.
7. Persistencia de datos (muy importante)
Cuando usas Docker, hay una idea clave que conviene tener muy clara desde el principio: 👉 los contenedores no están pensados para guardar datos por sí mismos.
Un contenedor puede: crearse, destruirse y actualizarse, pero los datos importantes no deberían vivir dentro de él. Aquí es donde entra en juego la persistencia.
N8N no es solo una interfaz. Dentro guarda información crítica como: tu usuario y contraseña, tus workflows, tus credenciales (APIs, tokens, etc.), configuraciones internas, historial de ejecuciones...., Toda esa información se guarda en una carpeta concreta dentro del contenedor:
/home/node/.n8nSi no hacemos nada especial, esa carpeta vive dentro del contenedor y desaparece cuando el contenedor se borra. Para resolver esto, en apartados anteriores ya explicamos como crear un volumen donde guardar esos datos.
Esto conecta el volumen Docker n8n_data (fuera del contenedor), con la carpeta interna donde N8N guarda todo.
Gracias a esto: puedes parar N8N, cerrar Docker Desktop, reiniciar el ordenador, actualizar la imagen de N8N
y todo seguirá exactamente igual al volver a arrancar.

Esta forma de trabajar tiene ventajas claras:
es exactamente la misma que se usa en un VPS,
facilita backups (copiando el volumen),
permite migrar N8N de local a servidor,
reduce riesgos al actualizar versiones.
Por eso, aunque ahora estés trabajando en local, ya estás usando una arquitectura “de servidor”.
8. Detener, arrancar y actualizar N8N
Si usas la terminal:
Para detenerlo: Ctrl + C
Detiene el contenedor, libera el puerto 5678 y elimina el contenedor ya que usamos --rm para crearlo
Para arrancarlo: ejecutar el comando de nuevo
docker run -it --rm......
Para actualizar N8N: docker pull n8nio/n8n
Este comando descarga la versión más reciente de la imagen oficial.
Con Docker:
actualizar N8N no rompe dependencias,
no necesitas tocar Node.js,
no hay instalaciones “a medias”,
y puedes volver atrás fácilmente si algo falla.
👉 Este es uno de los grandes motivos por los que Docker es la opción preferida en servidores.
9. N8N local vs N8N en Docker
Instalación local | Docker |
Depende de Node.js | Aislado |
Más frágil | Más estable |
Ideal para aprender | Ideal para producción |
Difícil de migrar | Muy portable |
Docker es el paso natural antes de un VPS.
10. Conclusión
En este capítulo has dado un paso muy importante:has aprendido a ejecutar N8N dentro de Docker, de una forma limpia, reproducible y muy cercana a cómo se usa en servidores reales.
Ahora ya sabes que:
Docker te permite ejecutar N8N sin depender de Node.js.
Los contenedores son temporales, pero los volúmenes hacen que tus datos sean persistentes.
Puedes parar, arrancar y actualizar N8N sin miedo a perder nada.
El entorno que has montado en local es prácticamente el mismo que usarías en un VPS o en producción.
Este no es solo un capítulo técnico:es un cambio de mentalidad hacia automatizaciones más estables, mantenibles y profesionales.
A partir de aquí, todo lo que construyas en N8N tendrá una base sólida.
Qué hacer ahora
Si ya tienes N8N funcionando en Docker, te propongo algunos pasos prácticos:
👉 Para afianzar lo aprendido:
Para el contenedor y vuelve a arrancarlo.
Entra en N8N y comprueba que tus workflows siguen ahí.
Mira el volumen con docker volume ls.
Familiarízate con Docker Desktop y el estado del contenedor.
👉 Para ir un paso más allá:
Guarda el comando docker run en un archivo.
Piensa cómo lo ejecutarías en un servidor remoto.
Imagina este mismo setup en un VPS… porque es prácticamente igual.
🌐 Recursos
📘 Documentación oficial
Docker Desktop https://www.docker.com/products/docker-desktop/
Imagen oficial de N8N https://hub.docker.com/r/n8nio/n8n
Docs N8N + Docker https://docs.n8n.io/hosting/installation/docker/
💙 En Lozkorp, serie N8N


















