Syncthing sincroniza tus carpetas entre ordenadores, móviles y servidores sin que un solo byte pase por la nube de nadie, y con Docker lo tienes funcionando en un par de minutos. En esta guía levantas Syncthing con un único archivo docker-compose.yml, entiendes por qué conviene usar la red del host, configuras los permisos con PUID/PGID, emparejas dos dispositivos y aprendes qué puertos necesita para descubrirse y sincronizar. Al final comparamos este modelo punto a punto con la nube tradicional. La misma explicación está disponible en inglés.

Puntos clave

  • Syncthing es una herramienta libre de sincronización continua de ficheros punto a punto (P2P): cada carpeta compartida se mantiene idéntica en todos los dispositivos emparejados, sin servidor central que guarde tus datos.
  • Todo el tráfico va cifrado con TLS mediante el Block Exchange Protocol, y cada dispositivo se identifica con un ID criptográfico (una cadena base32 de 56 caracteres), así que nadie se conecta sin tu permiso.
  • Con Docker basta un servicio; el estado y la configuración viven en el volumen montado en /var/syncthing, y el contenedor corre como el usuario 1000:1000, ajustable con PUID/PGID.
  • Usa network_mode: host: en modo bridge, Docker oculta las IP locales y rompe el descubrimiento en la red de área local (LAN), obligando a sincronizar por relé, mucho más lento.
  • Fija una versión concreta de la imagen (por ejemplo syncthing/syncthing:2.1.2) en lugar de :latest, para decidir tú cuándo saltas de versión mayor.

¿Qué es Syncthing y en qué consiste la sincronización P2P?

Syncthing es un programa de sincronización de archivos de código abierto (licencia MPL-2.0) creado por Jakob Borg en 2013. Su propósito es sencillo de enunciar y difícil de igualar: mantener una o varias carpetas idénticas en todos tus dispositivos, en tiempo real, sin depender de un proveedor externo. A diferencia de Dropbox o Google Drive, aquí no hay un servidor central que almacene una copia maestra de tus ficheros: los dispositivos hablan directamente entre sí.

Ese modelo punto a punto (P2P) tiene tres consecuencias prácticas. La primera es de privacidad: tus datos solo existen en tus propios equipos, y el tráfico entre ellos va cifrado extremo a extremo con TLS a través del Block Exchange Protocol (BEP). La segunda es de confianza: cada dispositivo tiene un identificador criptográfico único, una cadena base32 de 56 caracteres derivada de su certificado, y dos dispositivos solo se sincronizan si ambos se han añadido mutuamente. La tercera es de coste: no pagas cuota de almacenamiento, porque el almacenamiento es el disco que ya tienes.

Para encontrarse, los dispositivos usan el descubrimiento local (una emisión en la LAN) y, si están en redes distintas, unos servidores de descubrimiento global y una red de relés que mantiene el propio proyecto. Esos servidores solo actúan de directorio y de puente cifrado cuando no hay conexión directa; nunca ven el contenido de tus ficheros. Si guardas datos importantes en tus carpetas, combínalo con una estrategia de copias con Duplicati, porque sincronización no es lo mismo que copia de seguridad: si borras un archivo, el borrado se propaga.

El docker-compose.yml de Syncthing con PUID/PGID

Crea una carpeta para el proyecto y guarda dentro este docker-compose.yml. La imagen oficial guarda su configuración y sus bases de datos en /var/syncthing, así que ese es el único directorio que debes persistir, más las carpetas que quieras sincronizar:

services:
  syncthing:
    image: syncthing/syncthing:2.1.2
    container_name: syncthing
    hostname: mi-servidor
    restart: unless-stopped
    network_mode: host
    environment:
      PUID: 1000
      PGID: 1000
      STGUIADDRESS: 0.0.0.0:8384
    volumes:
      - syncthing_config:/var/syncthing
      - /ruta/en/el/host/Documentos:/var/syncthing/Documentos
    healthcheck:
      test: ["CMD", "wget", "-qO", "/dev/null", "http://127.0.0.1:8384/rest/noauth/health"]
      interval: 30s
      timeout: 10s
      retries: 5

volumes:
  syncthing_config:

Antes de arrancar, ajusta dos cosas. Cambia PUID/PGID por el usuario dueño de las carpetas que vas a sincronizar (averígualo en el anfitrión con id tu_usuario); si no coinciden, Syncthing no podrá escribir y verás errores de permisos, un problema clásico que también aparece al trabajar con volúmenes y bind mounts en Docker. Y sustituye /ruta/en/el/host/Documentos por la carpeta real que quieras compartir.

La variable STGUIADDRESS: 0.0.0.0:8384 hace que la interfaz web escuche en todas las direcciones, no solo en 127.0.0.1, para que puedas abrirla desde otro equipo de tu red. Arranca la pila y comprueba el estado:

docker compose up -d
docker compose ps
docker compose logs -f syncthing

Cuando docker compose ps muestre el estado healthy, abre http://IP-DEL-SERVIDOR:8384 en el navegador. La primera vez, Syncthing te pedirá que fijes un usuario y una contraseña para la interfaz: hazlo de inmediato, porque el panel controla toda la sincronización.

¿Por qué usar la red del host y no el modo bridge?

Este es el detalle que más quebraderos de cabeza evita. Syncthing descubre a sus compañeros de LAN emitiendo un anuncio por el puerto 21027/UDP. En el modo de red bridge por defecto, Docker mete al contenedor detrás de su propia NAT, de modo que Syncthing ve la IP interna de Docker (algo como 172.18.0.2) en lugar de la IP real de tu servidor. Resultado: el descubrimiento local falla y los dispositivos acaban conectándose por un relé remoto, con velocidades mucho peores.

Por eso el compose de arriba usa network_mode: host: el contenedor comparte la pila de red del anfitrión y ve las IP reales. Con host, la sección ports se ignora (los puertos ya están publicados en el host). Si por algún motivo no puedes usar host (por ejemplo, para meterlo detrás de Traefik solo para la interfaz web), quita network_mode: host y publica los puertos a mano:

    ports:
      - "8384:8384"
      - "22000:22000/tcp"
      - "22000:22000/udp"
      - "21027:21027/udp"

Aun así, en bridge el descubrimiento local seguirá siendo poco fiable; para uso doméstico, host es casi siempre la respuesta correcta.

¿Cómo emparejar dispositivos y compartir una carpeta?

Sincronizar en Syncthing son dos pasos: primero presentas los dispositivos, luego compartes una carpeta entre ellos. Instala Syncthing también en el segundo equipo (móvil, portátil u otro servidor con este mismo compose) y sigue este flujo:

  • En el primer dispositivo, entra en la interfaz web y pulsa Acciones, Mostrar ID. Copia el ID del dispositivo, esa cadena de 56 caracteres.
  • En el segundo dispositivo, pulsa Añadir dispositivo remoto, pega el ID y guarda. En el primero aparecerá un aviso pidiendo confirmar el nuevo dispositivo: acéptalo. El emparejado siempre es recíproco.
  • Ahora comparte la carpeta. En Añadir carpeta define una etiqueta y una ruta dentro del contenedor (por ejemplo /var/syncthing/Documentos, que ya montaste), y en la pestaña Compartir marca el dispositivo remoto.
  • En el otro equipo saltará una notificación ofreciendo la carpeta; acéptala y elige dónde guardarla. A partir de ahí, cualquier cambio se propaga solo.

Un detalle útil es el tipo de carpeta. Por defecto es Enviar y recibir (bidireccional), pero puedes ponerla como Solo enviar (por ejemplo, un servidor que publica ficheros pero nunca acepta cambios ajenos) o Solo recibir (una réplica de respaldo). Combinar tipos te da control fino sobre el sentido del flujo.

¿Qué puertos necesita Syncthing y para qué sirven?

Conviene tener claros los cuatro puertos, sobre todo si vas a sincronizar entre distintas redes o a través de Internet:

  • 8384/TCP es la interfaz web de administración. No la expongas nunca directamente a Internet; si necesitas acceso remoto, hazlo por VPN o tras un proxy inverso con autenticación.
  • 22000/TCP transporta el protocolo de sincronización (BEP sobre TLS). Es el puerto que de verdad mueve tus ficheros.
  • 22000/UDP hace lo mismo pero sobre QUIC, útil cuando TCP va mal.
  • 21027/UDP es el descubrimiento local: la emisión que permite a dos dispositivos de la misma LAN encontrarse sin configuración.

Para sincronizar a través de Internet con conexión directa (más rápida que el relé), abre en tu router un reenvío de los puertos 22000/TCP y 22000/UDP hacia el servidor. La interfaz de Syncthing te avisa si detecta que las conexiones entrantes están bloqueadas. Como la comunicación es bidireccional, basta con que uno de los dos extremos tenga el puerto abierto para que ambos conecten.

Syncthing frente a la nube tradicional

¿Cuándo elegir Syncthing y cuándo un servicio de nube? Syncthing brilla cuando quieres que dos o más equipos tuyos mantengan las mismas carpetas: la fototeca del portátil replicada en casa, los proyectos entre la oficina y el estudio, o la copia de los documentos del móvil en el servidor. Es gratis, privado y no impone límite de espacio más allá de tus discos.

No es la herramienta ideal para todo. No ofrece una interfaz web para abrir tus archivos desde cualquier navegador como haría Seafile o Nextcloud, no comparte enlaces públicos y, sobre todo, no es una copia de seguridad: al replicar los cambios, también replica los borrados y los errores. La combinación potente es usar Syncthing para tener tus datos vivos en varios equipos y añadir encima copias con versiones e histórico. Ten presente también que desde Syncthing 2.0 (agosto de 2025) la base de datos interna pasó de LevelDB a SQLite, con una migración automática la primera vez que arrancas esa versión; y que los elementos borrados dejan de guardarse para siempre y se olvidan a los seis meses.

Preguntas frecuentes

¿Syncthing sube mis archivos a algún servidor en la nube?

No. Syncthing es punto a punto: tus ficheros solo se copian entre los dispositivos que tú emparejas, y el tráfico va cifrado con TLS. Los servidores de descubrimiento global y los relés del proyecto solo ayudan a que dos dispositivos se encuentren o se conecten cuando no hay ruta directa, pero nunca almacenan ni pueden leer el contenido de tus carpetas.

¿Por qué mis dispositivos no se ven en la misma red?

Casi siempre es por la red de Docker. Si arrancaste el contenedor en modo bridge, Syncthing ve la IP interna de Docker y el descubrimiento local por el puerto 21027/UDP no funciona. La solución es usar network_mode: host, como en el compose de esta guía. Si aun con host no conectan a través de Internet, revisa el reenvío de los puertos 22000/TCP y 22000/UDP en el router.

¿Puedo usar Syncthing como copia de seguridad?

No conviene. Syncthing sincroniza, no versiona: si borras o corrompes un archivo en un dispositivo, ese cambio se replica en los demás. Puedes activar el control de versiones de archivos en cada carpeta para conservar copias antiguas durante un tiempo, pero para una estrategia real de respaldo usa una herramienta de copias con retención e histórico, como Duplicati, en paralelo.

Conclusión

Con un único servicio en docker-compose.yml, la red del host y un par de variables de permisos tienes Syncthing sincronizando carpetas entre todos tus dispositivos, cifrado de extremo a extremo y sin depender de la nube de nadie. Recuerda las dos reglas de oro: usa network_mode: host para que el descubrimiento local funcione y no confundas sincronización con copia de seguridad. El siguiente paso natural es emparejar tu móvil o un segundo servidor y, si guardas datos valiosos, añadir una capa de copias con Duplicati.

Fuentes: [1] Documentación oficial de Syncthing[1], [2] Imagen oficial syncthing en Docker Hub[2], [3] Syncthing en GitHub: código y notas de versión[3].

Fuentes

  1. Documentación oficial de Syncthing
  2. Imagen oficial syncthing en Docker Hub
  3. Syncthing en GitHub: código y notas de versión

Ruta: Bases de datos y almacenamiento self-hosted con Docker