Cómo instalar / actualizar contenedores Docker con Script "update-container.sh" - Script para actualizar contenedores Docker automatizado
update-container.sh: Script Bash para actualizar contenedores Docker Compose automático con validación segura, error handling, limpieza de imágenes, flexible (interactivo o argumento), idempotente, production-ready 🐳⚙️
update-container.sh es un script Bash profesional que automatiza la actualización de contenedores Docker Compose. Descarga imágenes nuevas (docker compose pull), relanza contenedores (docker compose up -d), limpia imágenes obsoletas (docker image prune). Soporta uso interactivo (pide nombre) o por argumento. Validación segura con set -uo pipefail. Error handling robusto. Almacena contenedores en $HOME/docker/
¿Qué es update-container.sh?
update-container.sh es un script Bash profesional que automatiza el proceso completo de actualización de contenedores Docker Compose autohospedados con pull de imágenes, relanzamiento de servicios, error handling robusto, validación segura de entrada, y limpieza automática de imágenes obsoletas, reduciendo riesgo operacional y ahorrando tiempo. El helper perfecto para mantener tu homelab actualizado sin complicaciones.
Propuesta clave: Bash script automation. Docker Compose update workflow. Asume estructura $HOME/docker/
¿Cómo funciona update-container.sh?
El script ejecuta 5 pasos principales en orden. Si cualquier paso falla, se detiene inmediatamente.
1. Obtener nombre contenedor
Modo 1 (interactivo): Si ejecutas ./update-container.sh sin argumentos, el script pide el nombre por teclado con prompt.
Modo 2 (argumento): Si ejecutas ./update-container.sh authentik, usa "authentik" directamente.
2. Validación de entrada
Previene path traversal attacks (ej: ../../../etc/passwd) y rutas raras. Solo permite nombres simples sin barras ni ../.
3. Verificar directorio existe
Asume estructura: $HOME/docker/. Si no existe, sale con error antes de hacer cambios.
4. Cambiar directorio
Navega a $HOME/docker/ donde está el docker-compose.yml.
5. Pull imágenes nuevas
Descarga versiones nuevas de imágenes Docker desde registry (Docker Hub, GHCR, etc). Si falla, script se detiene.
6. Relanzar contenedores
Ejecuta docker compose up -d. Detiene contenedores viejos, crea nuevos con imágenes actualizadas, levanta en background.
7. Limpieza automática
Ejecuta docker image prune -f al final. Elimina imágenes no usadas (dangling images). Libera espacio automático.
Características principales
Modo dual (interactivo + argumento)
Pide nombre si no lo dan. O recibe argumento. Flexible.
Validación segura
Previene path traversal. Solo nombres simples. Input sanitizado.
Error handling robusto
Cada paso validado. Si falla, sale con error. No continúa.
set -uo pipefail
Variables no definidas = error. Pipe falla = script falla.
Pull + Up combo
docker compose pull → docker compose up -d. Actualización completa.
Limpieza automática
docker image prune -f. Elimina images dangling. Libera espacio.
Emoji feedback
📥🚀✅❌🧹. User-friendly console output. Visual progress.
$HOME personalización
$HOME/docker/
Idempotente
Correr 2x mismo comando = mismo resultado. Seguro repetir.
Cron-ready
Automatiza updates. Pasa nombre argumento. Cron job friendly.
Instalación y setup
Paso 1: Descargar script
Paso 2: Hacer ejecutable
Paso 3: Verificar estructura directorio
El script espera esta estructura:
docker-compose.yml en $HOME/docker// . Si tu estructura es diferente (ej: /opt/docker/), edita DOCKER_BASE_DIR en el script.
Cómo usar update-container.sh
Uso modo interactivo
Uso con argumento
Uso en cron (automatizado)
Actualiza contenedores automáticamente según cronograma:
0 3 * * 0 /home/usuario/update-container.sh authentik >> /var/log/update-container.log 2>&1
Análisis código línea por línea
Shebang + comentarios iniciales
set -uo pipefail (línea 10)
Variable DOCKER_BASE_DIR (línea 13)
Obtener nombre contenedor (línea 16-19)
Validación entrada (línea 21-25)
Verificar directorio existe (línea 27-30)
Cambiar directorio con error check (línea 32-36)
Pull imágenes con error check (línea 38-43)
Up -d con error check (línea 45-50)
Limpieza imágenes (línea 52-54)
Consideraciones de seguridad
Path traversal prevention
Script valida entrada para prevenir ataques path traversal:
Error stderr redirection
Errores van a stderr (>&2), no stdout. Importante para pipes y logging:
Variable quoting
Todas variables quoted "$var". Previene word splitting:
Exit codes
Script retorna 1 on error, 0 on success. Importante para scripts/cron:
Casos de uso reales
- Manual update: Un contenedor rápido:
./update-container.sh authentik - Cron automated: Updates nocturnos: cron ejecuta script cada semana.
- Batch updates: Loop actualiza múltiples contenedores:
for app in authentik dawarich heimdall; do ./update-container.sh $app; done - Backup antes update:
docker compose exec postgres pg_dump > backup.sql && ./update-container.sh dawarich - Monitoring: Cron logs a file, monitorea errores con alertas.
Troubleshooting y debugging
Problema: "El directorio no existe"
Verifica estructura $HOME/docker/
Problema: "docker compose command not found"
Script espera docker compose (v2). Si tienes docker-compose (v1):
Problema: "Permission denied"
Asegúrate script es ejecutable:
Problema: Cron no corre script
Usa path absoluto en cron:
Debugging verbose
Agrega set -x al inicio para tracing:
Mejoras posibles (extensiones)
Verificar cambios antes de actualizar
Rollback automático
Si up falla, volver a versión anterior con tag específico.
Notificaciones
Enviar email o Telegram si falla update:
Multi-contenedor
Script versión que actualiza TODOS contenedores sin argumento.
Comentarios
Publicar un comentario