Synology NAS 如何备份 Docker 容器?图形界面 + 命令行步骤 + 问题解决


一、为什么必须备份 Synology NAS 上的 Docker 容器?

在学习备份方法前,需先明确 “为何要备份”——Docker 容器的特性决定了其数据易失性,具体体现在三个方面:

1. 容器本身 “临时属性”:配置易丢失

Docker 容器基于镜像运行,若未通过 “数据卷” 或 “绑定挂载” 持久化数据,容器内的配置文件(如 Nginx 的.conf 文件、数据库的配置参数)会随容器删除而消失。即使通过命令行修改过容器参数(如端口映射、环境变量),若未备份,一旦容器故障,这些自定义配置无法恢复。

2. 数据卷与容器分离:需单独备份

Synology Docker 的 “数据卷” 虽能持久化数据(如 MySQL 数据库文件、博客文章),但数据卷与容器是独立存储的 —— 仅删除容器不会删除数据卷,但若 NAS 硬盘故障、误删数据卷,或重新安装 Docker 套件,数据卷仍可能丢失。因此,备份需同时覆盖 “容器配置” 与 “数据卷”。

3. 意外场景频发:避免服务中断

以下场景会直接导致 Docker 容器不可用,若未备份则需重新部署:
  • 误操作:不小心删除运行中的容器,或误删 Docker 镜像;
  • 套件故障:Docker 套件升级失败、崩溃,需卸载重装;
  • 硬件问题:NAS 硬盘坏道,导致 Docker 数据目录损坏;
  • 配置错误:修改容器参数后导致服务无法启动,需回滚到之前的正常状态。

二、Synology NAS 备份 Docker 容器:图形界面法(新手推荐)

Synology DSM 的 Docker 套件提供可视化备份功能,无需代码基础,适合新手操作。该方法需分 “备份容器镜像” 和 “备份数据卷” 两步,确保配置与数据全量覆盖。

步骤 1:备份 Docker 容器镜像(含配置参数)

容器镜像是容器运行的基础,备份镜像可保存容器的基础环境、安装的软件及自定义配置,具体步骤如下:
  1. 打开 Docker 套件:登录 Synology DSM 桌面,点击 “Docker” 图标(确保 Docker 套件版本≥20.10.3-1308,可通过 “套件中心→已安装→Docker” 检查版本,低于此版本需先升级);
  1. 选中目标容器:在左侧导航栏点击 “容器”,找到需备份的容器(如 “nginx-web”),点击选中(确保容器处于 “运行中” 或 “已停止” 状态均可,建议停止运行中的容器,避免备份时数据写入导致文件损坏);
  1. 导出容器为镜像:
    • 点击顶部 “操作” 按钮,在下拉菜单中选择 “创建镜像”;
    • 在弹出窗口中,“镜像名称” 建议按 “容器名_备份日期” 格式命名(如 “nginx-web_backup_202410”),“标签” 填 “latest”(便于后续识别最新备份),点击 “确定”;
    • 等待镜像创建完成(进度条显示 100%),此时在左侧 “镜像” 标签页中可看到新创建的备份镜像;
  1. 保存镜像到本地 / 共享文件夹:
    • 在 “镜像” 标签页选中刚创建的备份镜像,点击顶部 “操作”→“导出”;
    • 选择备份文件的保存位置:建议选择 NAS 的非 Docker 数据目录(如 “volume1/Backup/Docker”,避免 Docker 目录故障时备份文件一同丢失);
    • “文件名” 保持默认(或按 “镜像名.tar” 命名,如 “nginx-web_backup_202410.tar”),点击 “确定”;
    • 等待导出完成(根据镜像大小,耗时从几秒到几分钟不等,1GB 镜像约需 1-2 分钟),可在目标文件夹中看到.tar 格式的备份文件。

步骤 2:备份 Docker 数据卷(含持久化数据)

仅备份镜像无法恢复数据卷中的持久化数据(如数据库文件、用户上传的文件),需单独备份数据卷,步骤如下:
  1. 定位数据卷存储路径:
    • 打开 Docker 套件→左侧 “数据卷”,找到与目标容器关联的数据卷(如 “nginx-web_data”),点击选中;
    • 点击顶部 “详情”,在 “挂载路径” 中可查看数据卷在 NAS 中的实际存储位置(默认路径为 “/volume1/@docker/volumes/ 数据卷 ID/_data”,但不建议直接操作此路径,避免破坏 Docker 文件结构);
  1. 通过 File Station 复制数据卷:
    • 打开 Synology DSM 的 “File Station”,在顶部地址栏输入数据卷的实际存储路径(如 “/volume1/@docker/volumes/1234567890abcdef/_data”,将 “1234567890abcdef” 替换为数据卷详情中的 “ID”);
    • 选中该路径下的所有文件,右键点击 “复制”;
    • 导航到备份文件夹(如 “volume1/Backup/Docker/nginx-web_data”),右键点击 “粘贴”;
    • 等待复制完成(数据量较大时需耐心等待,建议勾选 “复制完成后通知我”);
  1. 压缩备份(可选):若数据卷文件较多,可右键点击备份后的文件夹,选择 “压缩”→“创建 ZIP 文件”,减少存储空间占用(注意:压缩时需关闭使用该数据卷的容器,避免文件被占用导致压缩失败)。

三、Synology NAS 备份 Docker 容器:SSH 命令行法(进阶用户)

对于需要批量备份、定时备份的进阶用户,SSH 命令行法更灵活高效。需先开启 NAS 的 SSH 功能,再通过命令行执行备份操作。

步骤 1:开启 Synology NAS 的 SSH 服务

  1. 登录 DSM 桌面,打开 “控制面板”→“终端机和 SNMP”;
  1. 勾选 “启动 SSH 服务”,默认端口为 22(若需修改,可在 “端口” 栏调整,建议记录修改后的端口);
  1. 点击 “应用”,弹出提示框点击 “确定”,SSH 服务开启。

步骤 2:通过 SSH 连接 NAS 并执行备份

使用电脑端工具(如 Windows 的 PuTTY、Mac 的终端)连接 NAS,具体操作如下:

(1)备份 Docker 容器镜像(命令行)

  1. 连接 NAS:
    • 打开 PuTTY,“主机名称” 输入 NAS 的 IP 地址(如 “192.168.1.100”),“端口” 输入 SSH 端口(默认 22),点击 “打开”;
    • 输入 NAS 的管理员账号(如 “admin”)和密码(输入时密码不显示,输完按回车),成功登录后显示 “admin@NAS 名称:~$”;
  1. 停止目标容器(可选但推荐):
    • 执行命令:docker stop 容器名或容器ID(如docker stop nginx-web,容器 ID 可通过docker ps -a查看);
    • 若提示 “Error response from daemon: cannot stop container”,说明容器正在占用资源,可先执行docker kill 容器名强制停止;
  1. 创建备份镜像:
    • 执行命令:docker commit 容器名 备份镜像名:标签(如docker commit nginx-web nginx-web_backup_202410:latest);
    • 执行完成后,通过docker images可查看新创建的备份镜像;
  1. 导出镜像到共享文件夹:
    • 执行命令:docker save -o /volume1/Backup/Docker/备份文件名.tar 备份镜像名:标签(如docker save -o /volume1/Backup/Docker/nginx-web_backup_202410.tar nginx-web_backup_202410:latest);
    • 命令说明:-o指定输出路径,/volume1/Backup/Docker为备份文件夹路径(需替换为你的实际路径),等待命令执行完成(无报错即成功)。

(2)备份 Docker 数据卷(命令行)

通过cp命令复制数据卷文件,比图形界面更高效,步骤如下:
  1. 查看数据卷详情:
    • 执行命令:docker volume inspect 数据卷名(如docker volume inspect nginx-web_data);
    • 在输出结果中找到 “Mountpoint” 字段,记录数据卷的实际路径(如 “/volume1/@docker/volumes/1234567890abcdef/_data”);
  1. 复制数据卷到备份文件夹:
    • 执行命令:sudo cp -r 数据卷实际路径/* /volume1/Backup/Docker/数据卷备份文件夹/(如sudo cp -r /volume1/@docker/volumes/1234567890abcdef/_data/* /volume1/Backup/Docker/nginx-web_data/);
    • 命令说明:sudo获取管理员权限,-r表示递归复制(含子文件夹),*表示复制所有文件;
  1. 验证备份结果:
    • 执行命令:ls /volume1/Backup/Docker/数据卷备份文件夹/(如ls /volume1/Backup/Docker/nginx-web_data/);
    • 若显示数据卷中的文件(如 “html”“conf”),说明备份成功。

四、关键步骤:Docker 容器备份后必须验证

备份完成不代表 “可用”,需通过 “导入备份” 测试,确保备份文件能正常恢复服务,避免关键时刻备份失效。

1. 验证镜像备份:导入并启动容器

  1. 打开 Docker 套件→“镜像”→点击 “添加”→“从文件导入”;
  1. 选择之前备份的.tar 镜像文件(如 “nginx-web_backup_202410.tar”),点击 “下一步”,等待导入完成;
  1. 导入成功后,在 “镜像” 列表中找到该镜像,点击 “启动”;
  1. 在 “创建容器” 窗口中,保持默认配置(或按原容器参数设置端口映射、环境变量),点击 “下一步”→“完成”;
  1. 若容器能正常启动(“容器” 列表中状态为 “运行中”),且访问服务(如通过浏览器访问 Nginx 的 IP + 端口)正常,说明镜像备份有效。

2. 验证数据卷备份:挂载并检查数据

  1. 新建一个测试数据卷(Docker→“数据卷”→“创建”,命名为 “test_data”);
  1. 通过 File Station 将备份的数据卷文件(如 “nginx-web_data” 中的文件)复制到 “test_data” 的实际路径(通过docker volume inspect test_data查看路径);
  1. 启动一个新容器,挂载 “test_data” 数据卷(在 “高级设置”→“卷” 中,选择 “test_data”,设置容器内挂载路径与原容器一致,如 “/usr/share/nginx/html”);
  1. 进入容器查看数据:通过 Docker 套件 “容器”→选中测试容器→“详情”→“终端机”→“创建”,执行命令ls /usr/share/nginx/html;
  1. 若显示备份的文件(如 “index.html”),说明数据卷备份有效。

五、Docker 容器备份常见问题与解决方案

实际操作中,用户常遇到备份失败、文件过大、定时备份困难等问题,以下为针对性解决方法:
常见问题
核心原因
分步解决方案
导出镜像时提示 “空间不足”
备份文件夹所在硬盘剩余空间小于镜像大小;或 Docker 临时目录空间不足
1. 通过 “存储管理器” 查看备份文件夹所在卷的剩余空间,确保≥镜像大小(可通过docker images查看镜像大小);2. 若空间不足,删除无用文件或更换备份路径(如从 “volume1” 切换到剩余空间充足的 “volume2”);3. 若提示 “临时目录满”,执行sudo rm -rf /tmp/*清理临时文件,再重新导出
数据卷备份后文件缺失
备份时容器未停止,部分文件被占用导致复制失败;或数据卷路径错误
1. 停止目标容器(docker stop 容器名),重新复制数据卷文件;2. 通过docker volume inspect 数据卷名再次确认路径,确保复制的是 “Mountpoint” 对应的路径,而非其他目录;3. 若仍缺失,检查是否有 “绑定挂载” 的文件(非数据卷),需单独备份绑定挂载的本地路径(如/volume1/www)
命令行备份提示 “权限被拒绝”
SSH 登录用户无管理员权限;或备份文件夹无写入权限
1. 确保使用 NAS 管理员账号(如 “admin”)登录 SSH,而非普通用户;2. 给备份文件夹赋予写入权限:执行sudo chmod 775 /volume1/Backup/Docker(775 表示管理员和用户组有读写权限);3. 若仍报错,在命令前加sudo(如sudo docker save ...)提升权限
备份文件过大,占用存储空间
未清理旧镜像;或未压缩备份文件
1. 删除无用的旧备份镜像:docker rmi 旧镜像名:标签(先通过docker images查看冗余镜像);2. 压缩备份文件:gzip /volume1/Backup/Docker/镜像.tar(压缩后文件后缀为.tar.gz,体积减少 50% 左右);3. 开启 NAS 的 “文件去重” 功能(“存储管理器→全局设置→文件去重”),减少重复备份占用的空间

六、优化方案:设置 Docker 容器定时自动备份

手动备份易遗漏,通过 Synology 的 “任务计划” 设置定时备份,可实现自动化,具体步骤如下:

1. 创建备份脚本(以命令行备份为例)

  1. 打开 “File Station”,在 “volume1/Backup/Docker” 文件夹中新建文本文档,命名为 “docker_backup.sh”;
  1. 打开文档,输入以下脚本内容(需根据你的容器名、数据卷名、备份路径修改):
#!/bin/bash# 定义变量CONTAINER_NAME="nginx-web"  # 目标容器名VOLUME_NAME="nginx-web_data"  # 目标数据卷名BACKUP_PATH="/volume1/Backup/Docker"  # 备份路径DATE=$(date +%Y%m%d)  # 获取当前日期(格式:20241015)# 停止容器docker stop $CONTAINER_NAME# 备份镜像docker commit $CONTAINER_NAME ${CONTAINER_NAME}_backup_$DATE:latestdocker save -o $BACKUP_PATH/${CONTAINER_NAME}_backup_$DATE.tar ${CONTAINER_NAME}_backup_$DATE:latest# 备份数据卷VOLUME_PATH=$(docker volume inspect -f '{{.Mountpoint}}' $VOLUME_NAME)sudo cp -r $VOLUME_PATH/* $BACKUP_PATH/${VOLUME_NAME}_backup_$DATE/# 压缩备份文件gzip $BACKUP_PATH/${CONTAINER_NAME}_backup_$DATE.tar# 启动容器docker start $CONTAINER_NAME# 保留最近30天的备份,删除旧备份find $BACKUP_PATH -name "${CONTAINER_NAME}_backup_*.tar.gz" -mtime +30 -deletefind $BACKUP_PATH -name "${VOLUME_NAME}_backup_*" -type d -mtime +30 -delete
  1. 保存文档,关闭后右键点击 “docker_backup.sh”→“属性”→“权限”,勾选 “执行” 权限(给管理员和用户组)。

2. 通过 “任务计划” 设置定时执行

  1. 打开 “控制面板”→“任务计划”→“创建”→“计划的任务”→“用户定义的脚本”;
  1. 基本设置:
    • 任务名称:“Docker 容器定时备份”;
    • 用户账号:选择 “root”(确保有最高权限);
    • 触发时间:设置为低峰期(如每天凌晨 3 点),“重复” 选择 “每天”;
  1. 任务设置:
    • 在 “运行命令” 框中输入:bash /volume1/Backup/Docker/docker_backup.sh
    • 勾选 “任务完成后发送电子邮件通知”,输入接收邮箱,便于查看备份结果;
  1. 点击 “确定”,选中任务→点击 “运行” 测试一次,若收到 “任务成功完成” 的邮件,说明定时备份设置生效。

总结

Synology NAS 的 Docker 容器备份需同时覆盖 “镜像(含配置)” 和 “数据卷(含持久化数据)”,新手可优先选择图形界面法,操作直观;进阶用户推荐命令行法,搭配定时脚本实现自动化。关键是备份后必须验证,避免 “无效备份”;遇到空间不足、权限问题时,可对照常见问题表排查解决。通过定期备份,能有效应对容器故障、误操作等场景,确保 Docker 服务稳定运行,减少数据丢失风险。

推荐产品 / Product
点击查看更多
留言表单
姓名为必选
电话为必选
公司为必选
地址为必选
邮箱为必选
留言为必选

感谢您的提交

确 定

表单提交失败

确 定

Copyright © 2011-2020 北京群晖时代科技有限公司 版权所有 京ICP备2020037175号-2

  • TOP