Estamos montando un servidor local en tu nuevo Mini PC con SO Linux Mint y Docker para crear contenedores individuales con todos tus programas. Una de las cosas más importantes que tienes que poner en marcha es un sistema de copia de seguridad de tu instalación de Docker (también de tu sistema Linux Mint y de tus datos personales).
En el caso de Docker, como estamos en un sistema Linux, lo tenemos sencillo para hacerlo por nuestra cuenta. No necesitamos ningún programa extra para tener nuestros datos a salvo en otro disco externo o en la nube.
¡Ojo! Vamos a hacer un backup de los datos de Docker, no de la instalación. La instalación, si tienes tus archivos de configuración yml es fácil de recrear. No hace falta hacer copia de las imágenes que se pueden descargar fácilmente, pero si has cambiado mucho la configuración de Docker, es posible que debas plantearte también hacer un backup (por ejemplo de /etc/docker/daemon.json).
Qué carpetas incluye este backup de Docker
Con este script que te propongo, vas a tener una copia de seguridad de:
- /var/lib/docker/volumes: donde tienes todos los volúmenes persistentes de tus contenedores, donde Docker guarda los datos de tus aplicaciones: bases de datos (MySQL, PostgreSQL), uploads, configuraciones, etc. Es donde se encuentran también los datos de Portainer (GUI de Docker).
- /home/tu_usuario_linux/docker: donde guardas tus archivos de configuración docker-compose.yml, archivos
.env
y otras carpetas de datos que has personalizado en tu archivo inicial de Docker Compose.
No hace falta complicarse más. Con esto estás cubierto. Solo tendrías que levantar de nuevo Docker en tu nuevo servidor, comenzar a instalar tus stacks y copiar estas carpetas a tu nueva instalación.
Script de copia de seguridad automático
He instalado un sistema operativo Linux con Docker en un Mini PC, en mi caso un mini PC Intel N150 con Docker, Jellyfin, Immich…
Cosas a tener en cuenta antes de empezar:
- Presupongo que tiene una carpeta /home/tu_usuario_linux/docker que vas a usar para meter datos de tus instalaciones Docker (al crear los docker-compose.yml), además de la ruta oficial donde guardas los datos de los volúmenes: /var/lib/docker/volumes. En /home guardo los datos de mis contenedores, por ejemplo, la configuración y muchos de sus datos (si me dejan configurarlo).
- Tienes que tener una carpeta de destino creada para guardar los backups, por ejemplo, en un disco externo: /ruta/a/carpeta/dockerbackup. Tienes que cambiar la ruta a /home/tu_usuario_linux/docker y /ruta/a/carpeta/dockerbackup en el script.
- ¿Tus contendores tienen la política restart: always? Cuidado con esto, porque se van a poner en marcha de nuevo, aunque tú mismo lo pares, lo que puede provocar que las bases de datos no se guarden correctamente en el backup. Cámbialo a restart: unless-stopped.

Lo único que tenemos que hacer para ponerlo en marcha es lo siguiente:
1.-Creamos el archivo
Vas a la terminal en Linux Mint y pones (cambia antes tu_usuario_linux por tu usuario real):
mkdir -p /home/tu_usuario_linux/scripts
sudo nano /home/tu_usuario_linux/scripts/backup-docker.sh

Voy a guardar el archivo en mi carpeta home de usuario en una carpeta llamada scripts y lo llamo backup-docker.sh. Al abrirse la pantalla de nano, introduce lo siguiente:
#!/bin/bash
# ============================================
# Backup completo de Docker (datos volúmenes + /home/tu_usuario_linux/docker)
# ============================================
# === ENTORNO PARA CRON ===
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# === CONFIGURACIÓN ===
BACKUP_DIR="/ruta/a/carpeta/dockerbackup"
DATE=$(date +%Y-%m-%d_%H-%M)
ARCHIVO="$BACKUP_DIR/backup-docker-$DATE.tar.gz"
LOGFILE="$BACKUP_DIR/backup.log"
# Rutas a respaldar
RUTAS_BACKUP=(
"/var/lib/docker/volumes"
"/home/tu_usuario_linux/docker"
)
# === CREAR DIRECTORIO DE BACKUP SI NO EXISTE ===
mkdir -p "$BACKUP_DIR"
echo "============================================" | tee -a "$LOGFILE"
echo "[ $(date '+%Y-%m-%d %H:%M:%S') ] Iniciando backup completo de Docker..." | tee -a "$LOGFILE"
# === DETENER CONTENEDORES ===
echo "Deteniendo contenedores..." | tee -a "$LOGFILE"
docker ps -q | xargs -r docker stop >> "$LOGFILE" 2>&1
# === CREAR ARCHIVO TAR DE LAS RUTAS ===
echo "Creando archivo de backup: $ARCHIVO" | tee -a "$LOGFILE"
tar czvf "$ARCHIVO" "${RUTAS_BACKUP[@]}" >> "$LOGFILE" 2>&1
# === REINICIAR CONTENEDORES ===
echo "Reiniciando contenedores..." | tee -a "$LOGFILE"
docker ps -a -q | xargs -r docker start >> "$LOGFILE" 2>&1
# === LIMPIAR BACKUPS ANTIGUOS (mantiene los últimos 2) ===
echo "Eliminando backups antiguos (manteniendo los últimos 2)..." | tee -a "$LOGFILE"
ls -tp "$BACKUP_DIR"/backup-docker-*.tar.gz | grep -v '/$' | tail -n +3 | xargs -r rm -- >> "$LOGFILE" 2>&1
echo "[ $(date '+%Y-%m-%d %H:%M:%S') ] Backup completado correctamente." | tee -a "$LOGFILE"
echo "Archivo generado: $ARCHIVO" | tee -a "$LOGFILE"
echo "============================================" | tee -a "$LOGFILE"
Le das a guardar con CRTL + O y luego sales con CRTL + X.
Luego, tienes que darle permisos de ejecución:
sudo chmod +x /home/tu_usuario_linux/scripts/backup-docker.sh
Ahora solo tendrías que crear un cron para que se ejecute cada cierto tiempo. Yo he puesto una vez a la semana los miércoles por la noche a las 5.
- ¡Ojo! Editamos el cron de root y no del usuario de tu sistema Linux para no tener problemas de permisos al intentar comprimir los archivos mediante tar en /var/lib/docker/volumes. root es el usuario administrador del sistema con todos los privilegios y Docker se ejecuta con privilegios del daemon (root). Por eso es necesario hacer esto.
- Al hacer un
tar
de /var/lib/docker/volumes, los archivos se copian con sus permisos originales. - Restaurarlos con root asegura que Docker podrá acceder a ellos correctamente sin fallos por permisos.
- Al hacer un
sudo crontab -e

Y pones lo siguiente:
0 5 * * 3 /home/tu_usuario_linux/scripts/backup-docker.sh
Le das a guardar con CRTL + O y luego sales con CRTL + X. Y ya lo tienes listo.
Cosas importantes a tener en cuenta:
- Detenemos contenedores: Tenemos que parar los contenedores para hacer un backup limpio de Docker, sobre todo de sus bases de datos. Por eso paramos los contenedores, hacemos el backup y luego los ponemos en marcha de nuevo
- ¿Usar mejor que el comando rsync? Bueno, en mi caso sí. Quiero un backup completo que se pueda restaurar de forma sencilla. En mi caso, el backup en estos momentos es de menos de 20 GB: tarda más de 20 minutos en realizarse, pero no es un tiempo exagerado. Puedes plantearte usar rsync si lo quieres hacer un backup incremental de los cambios semana a semana. En mi caso, estoy usando el comando rsync para hacer un backup semanal de las carpetas de datos de Immich, mi gestor de fotos, para no tener que subir varios TB cada semana al disco duro externo.
- Log: en el log puedes consultar qué tal ha ido todo en el backup. Puedes meterlo en logrotate si ves que va a ocupar mucho espacio.
- export PATH: se mete esa línea para que el cron no tenga problema en encontrar los comandos a ejecutar, es decir, docker y tar.
- Cuántos backups a mantener: yo solo me quedo con 2, peor puedes aumentar la cantidad en función de tus necesidades. Cambia la línea tail -n +3 y sube el número.
Consejo: Además de hacer este backup a tu disco duro externo… ¿Te has planteado subir la copia de seguridad a un servicio en la nube (como Backblaze, Filen, Koofr) para conseguir un backup 3-2-1? Tener al menos tres copias de los datos, conservar las copias en dos soportes diferentes y tener una copia del respaldo fuera de tu lugar físico habitual. Puedes hacerlo facilmente en Linux con herramientas como Rclone.
Cómo restaurar la copia de seguridad
Es sencillo, y deberías probar tu backup cada cierto tiempo para ver si está todo correcto.
Solo tienes que ir a la carpeta donde guardaste tu backup y extraer el archivo con (cambia /tu/ruta/carpeta/dockerbackup/ y tu-fecha en el nombre de archivo):
sudo tar -xzvf /tu/ruta/carpeta/dockerbackup/backup-docker-tu-fecha.tar.gz -C /
Verás las dos carpetas originales:
var/lib/docker/volumes/
home/tu_usuario_linux/docker/
Ahora, tienes que detener Docker con:
sudo systemctl stop docker
Copias las carpetas a sus rutas originales sobreescribiendo el contenido:
sudo cp -r /tu/ruta/carpeta/dockerbackup/var/lib/docker/volumes/* /var/lib/docker/volumes/
sudo cp -r /tu/ruta/carpeta/dockerbackup/home/ivan/docker/* /home/tu_usuario_linux/docker/
- Comprueba que todos los permisos de archivos sean correctos al pasar los archivos a tu nuevo servidor:
- En /var/lib/docker/volumes tienes que tener root:root
- En /home/tu_usuario_linux/docker/ tienes que tener tu_usuario_linux:tu_usuario_linux
Iniciamos Docker:
sudo systemctl start docker
Ahora solo te queda bajar de nuevo las imágenes de cada contenedor y ponerlos en marcha con este comando (debes ejecutarlo dentro de la carpeta de cada proyecto en /home/tu_usuario_linux/docker/):
sudo docker compose pull
sudo docker compose up -d
O puedes recuperar primero Portainer con el Backup y luego ir a la interfaz gráfica de este programa para descargar las imágenes y ponerlo todo en marcha. Depende de cómo hayas instalado inicialmente tus contenedores.
Como dato final. Comprueba los contenedores con el comando:
sudo docker ps -a
Y si algo no funciona, revisa los logs con:
sudo docker logs nombre_del_contenedor
Conclusión
De esta manera puedes hacer un buen backup de los datos de Docker y de tus proyectos, que es lo que realmente importa. Al principio puede parecer laborioso, pero solo tienes que configurar una vez y te olvidas.
- ¡Ojo! También te puedes plantear usar scripts ya creados por otros usuarios como docker-backup o Nautical (solo volúmenes).
- O programas de backup como Borg Backup o Duplicati.
Si ves que el activo que guardas va a aumentar con el tiempo, pásate a los backups incrementales o hazlo solo backup de los contenedores más críticos.
Recuerda comprobar la integridad de tus backups cada cierto tiempo y de seguir la regla 3-2-1.
Y no se te olvide configurar el reinicio automático de contenedores Docker.