Watchtower: actualizar contenedores Docker automáticamente
Índice de contenidos
- Puntos clave
- ¿Qué hace Watchtower?
- El docker-compose.yml de Watchtower
- Actualizaciones selectivas con etiquetas
- Notificaciones de actualización
- Riesgos de la actualización automática y cómo mitigarlos
- Preguntas frecuentes
- ¿Es seguro dejar que Watchtower actualice todo automáticamente?
- ¿Watchtower sigue funcionando si el proyecto original está archivado?
- ¿Cómo actualizo solo algunos contenedores?
- Conclusión
- Fuentes
Watchtower es un contenedor que vigila los registros Docker, detecta cuando hay una imagen más reciente, la descarga y recrea tu contenedor con las mismas opciones. Se configura con un pequeño docker-compose.yml, sondea cada 24 horas por defecto y puede limitarse por etiquetas o quedarse solo en modo aviso.
Watchtower es un contenedor que mantiene al día el resto de tus contenedores Docker sin que tengas que hacer nada. Vigila los registros de imágenes, se da cuenta cuando publican una versión más reciente de las que estás usando, la descarga y recrea tu servicio con exactamente las mismas opciones (puertos, volúmenes y variables). En esta guía verás qué hace, un docker-compose.yml listo para copiar, cómo limitar las actualizaciones a los contenedores que tú elijas y cómo recibir un aviso cada vez que actualice. La misma explicación está disponible en inglés.
Puntos clave
- Watchtower compara la imagen de cada contenedor con la del registro y, si hay una más nueva, la descarga y recrea el contenedor con la misma configuración.
- Solo necesita montar el socket de Docker (
/var/run/docker.sock); no tiene interfaz web y su imagen, escrita en Go, ocupa muy poco. - El proyecto original
containrrr/watchtowerquedó archivado el 17 de diciembre de 2025 en su versión 1.7.1; hoy se recomienda el fork mantenidonickfedor/watchtower, que va por la 1.19.0 (junio de 2026). - Por defecto sondea cada 24 horas (86400 segundos), pero puedes fijar un horario con una expresión cron o dejarlo en modo solo aviso.
- Puedes restringir qué contenedores actualiza con etiquetas y enviar notificaciones a Gotify, ntfy, Telegram o el correo.
¿Qué hace Watchtower?
Watchtower resuelve una tarea repetitiva del mantenimiento de un servidor casero: revisar cada cierto tiempo si las imágenes de tus contenedores tienen una versión nueva y aplicarla. En lugar de entrar por SSH, hacer docker compose pull y recrear cada servicio a mano, dejas un contenedor vigilando que hace ese trabajo por ti.
Su funcionamiento es sencillo. Cada intervalo de sondeo, Watchtower consulta el registro de imágenes del que salió cada contenedor y compara el identificador de la imagen local con el de la remota. Si detecta una imagen más reciente, la descarga, detiene el contenedor con cuidado y lo arranca de nuevo a partir de la imagen nueva, conservando los puertos, los volúmenes y las variables de entorno originales. Todo el proceso se apoya en el socket de Docker, que es lo único que hay que montar.
Conviene conocer un detalle de contexto antes de instalarlo. El repositorio original, containrrr/watchtower, se archivó el 17 de diciembre de 2025 y su última versión publicada fue la 1.7.1, de 2023, que ya no recibe parches de seguridad. La continuación activa es un fork de la comunidad, nickfedor/watchtower (también disponible como ghcr.io/nicholas-fedor/watchtower), compatible pieza a pieza y con la versión 1.19.0 publicada el 30 de junio de 2026. Por eso las plantillas de esta guía usan la imagen del fork.
El docker-compose.yml de Watchtower
Este es un docker-compose.yml mínimo y funcional. Fíjate en que se fija una versión concreta de la imagen en lugar de :latest: usar la etiqueta móvil en tus propios servicios es justo lo que hace impredecible una actualización, así que conviene evitarla también en el propio Watchtower.
services:
watchtower:
image: nickfedor/watchtower:1.19.0
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
WATCHTOWER_POLL_INTERVAL: "86400"
WATCHTOWER_CLEANUP: "true"
TZ: "Europe/Madrid"
Con este archivo, Watchtower revisa todas las imágenes cada 24 horas y, gracias a WATCHTOWER_CLEANUP, elimina la imagen antigua después de cada actualización para que no se acumulen capas huérfanas en el disco. Arráncalo y sigue sus registros con:
docker compose up -d
docker compose logs -f watchtower
Si prefieres un horario fijo en vez de un intervalo, sustituye WATCHTOWER_POLL_INTERVAL por WATCHTOWER_SCHEDULE con una expresión cron de seis campos; por ejemplo, "0 0 4 * * *" comprueba las imágenes cada día a las cuatro de la madrugada. No puedes definir el intervalo y el horario a la vez.
Watchtower no tiene panel web. Si buscas una interfaz para ver y actualizar tus contenedores a mano, combínalo con Portainer: Watchtower automatiza y Portainer te da el control visual cuando lo necesitas.
Actualizaciones selectivas con etiquetas
Actualizar todo a ciegas rara vez es buena idea. Watchtower puede vigilar solo los contenedores que tú marques: activa WATCHTOWER_LABEL_ENABLE y añade la etiqueta com.centurylinklabs.watchtower.enable=true a cada servicio que quieras mantener al día. El resto queda intacto.
services:
watchtower:
image: nickfedor/watchtower:1.19.0
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
WATCHTOWER_LABEL_ENABLE: "true"
WATCHTOWER_CLEANUP: "true"
gitea:
image: gitea/gitea:1.24
restart: unless-stopped
labels:
com.centurylinklabs.watchtower.enable: "true"
En este ejemplo, solo gitea se actualizará; una base de datos o cualquier servicio sensible que no lleve la etiqueta se queda como está. El enfoque contrario también existe: dejar que Watchtower vigile todo y excluir servicios concretos con la etiqueta puesta a "false". Para un servidor doméstico, la opción de activar por etiqueta suele ser la más segura.
Notificaciones de actualización
Que una actualización sea automática no significa que debas enterarte por casualidad. Watchtower envía avisos a través de shoutrrr[1], que admite Gotify, ntfy, Telegram, correo o Slack, entre otros. Basta con indicar una URL de notificación:
environment:
WATCHTOWER_POLL_INTERVAL: "86400"
WATCHTOWER_NOTIFICATION_URL: "gotify://gotify.midominio.com/TOKEN?title=Watchtower"
WATCHTOWER_NOTIFICATIONS_LEVEL: "info"
Con esa configuración recibirás un mensaje cada vez que Watchtower actualice algo, con la lista de contenedores afectados. Si aún no tienes un servidor de notificaciones propio, la guía de Gotify con Docker explica cómo montar uno en cinco minutos y obtener el token que va en la URL.
Riesgos de la actualización automática y cómo mitigarlos
La comodidad de Watchtower tiene una contrapartida: una versión nueva puede introducir un cambio incompatible y romper un servicio sin que nadie lo esté mirando. Por eso sus propios mantenedores lo recomiendan para homelabs, servidores multimedia y entornos de desarrollo, y desaconsejan usarlo en producción comercial. Estas prácticas reducen el riesgo casi por completo:
- Fija versiones mayores. Usa etiquetas como
postgres:17en lugar depostgres:latestpara que Watchtower solo aplique parches menores dentro de esa rama y nunca un salto de versión mayor. - Empieza en modo solo aviso. Con
WATCHTOWER_MONITOR_ONLY: "true", Watchtower comprueba y notifica, pero no toca nada; tú decides cuándo actualizar. - Activa por etiqueta. Actualiza automáticamente lo que no da problemas y deja fuera las bases de datos y los servicios delicados.
- Ten copias de seguridad de los volúmenes. Es la red de seguridad que te permite volver atrás si una actualización sale mal.
Como comprobación puntual, puedes lanzar una única pasada y salir sin dejar el contenedor residente, útil para probar antes de programarlo:
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
nickfedor/watchtower:1.19.0 --run-once
Preguntas frecuentes
¿Es seguro dejar que Watchtower actualice todo automáticamente?
Depende del servicio. Para un homelab, activarlo por etiqueta solo en aplicaciones sin estado es bastante seguro. En bases de datos o servicios críticos es preferible el modo solo aviso o actualizar a mano, porque un salto de versión mayor puede requerir una migración. Fijar la versión mayor de la imagen y tener copias de seguridad elimina casi todo el riesgo.
¿Watchtower sigue funcionando si el proyecto original está archivado?
Sí. La imagen containrrr/watchtower:1.7.1 todavía arranca y actualiza contenedores, pero ya no recibe parches de seguridad. Lo recomendable es migrar al fork mantenido nickfedor/watchtower, que es compatible pieza a pieza: en la práctica solo cambias el nombre de la imagen en tu docker-compose.yml.
¿Cómo actualizo solo algunos contenedores?
Añade WATCHTOWER_LABEL_ENABLE: "true" al servicio de Watchtower y pon la etiqueta com.centurylinklabs.watchtower.enable=true únicamente en los contenedores que quieras mantener al día. Los que no la lleven quedan excluidos, así que puedes automatizar lo trivial y gestionar lo delicado por tu cuenta.
Conclusión
Watchtower quita de encima una de las tareas más tediosas de mantener servicios en Docker: estar pendiente de cada nueva versión. Con un docker-compose.yml de diez líneas tienes las actualizaciones al día, y con las etiquetas y el modo solo aviso conservas el control sobre qué se actualiza y cuándo. Recuerda usar el fork nickfedor/watchtower, fijar las versiones mayores de tus imágenes y mantener copias de seguridad de los volúmenes. El siguiente paso natural es asegurarte de recibir los avisos montando tu propio servidor Gotify.