数据卷本体在 /var/lib/docker/volumes 下,但别直接拷目录。
正路是起一个临时容器挂上目标卷,用 tar 打包后写到宿主机。
要跨主机恢复可以管道直接传,省掉中间落盘那一步。
数据库类容器先做一致性处理,热拷出来的文件可能起不来。
# 1) 列出卷名与挂载点
docker volume ls
docker volume inspect app_data --format '{{.Mountpoint}}'
# 2) 备份:临时容器挂载卷和宿主机目录,tar 出来
docker run --rm -v app_data:/data -v "$PWD":/backup alpine \
tar czf /backup/app_data-$(date +%F).tar.gz -C /data .
# 3) 恢复:先建空卷,再反向解包
docker volume create app_data
docker run --rm -v app_data:/data -v "$PWD":/backup alpine \
tar xzf /backup/app_data-2026-10-08.tar.gz -C /data
# 4) 直接管道到另一台主机(不落盘)
docker run --rm -v app_data:/data alpine tar cz -C /data . \
| ssh user@target "docker run --rm -i -v app_data:/data alpine tar xz -C /data"
# 5) 数据库类容器别热拷,先在容器内导出逻辑备份
# docker exec -t mysql sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" db' > db.sql
THE END






暂无评论内容