You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过SSH复制只读服务器上含Postgres的Docker容器至新磁盘方案咨询

可行迁移方案

前置准备

  • 确认新磁盘已挂载到服务器,用lsblk或fdisk -l查看设备路径(例如/dev/sdb)
  • 给新磁盘创建文件系统(以ext4为例):mkfs.ext4 /dev/sdb
  • 创建挂载点并挂载新磁盘:mkdir /new-disk && mount /dev/sdb /new-disk

核心迁移步骤

1. 停止所有运行容器

因磁盘只读,常规停止命令可能报错,用强制终止:
docker kill $(docker ps -q)

2. 复制Docker数据目录

默认Docker数据目录为/var/lib/docker,完整复制到新磁盘:
rsync -avxP /var/lib/docker/ /new-disk/docker/

  • -a:保留权限、时间戳等元数据
  • -v:显示复制进度详情
  • -x:不跨文件系统复制,避免意外
  • -P:支持断点续传并显示实时进度

3. 修改Docker数据目录配置

  • 编辑(或创建)Docker配置文件/etc/docker/daemon.json:
    {
      "data-root": "/new-disk/docker"
    }
    
  • 若为旧版Docker,需修改/etc/systemd/system/docker.service.d/override.conf,在启动参数中添加--data-root /new-disk/docker

4. 重启Docker服务

systemctl daemon-reload && systemctl restart docker

5. 验证数据与服务

  • 启动所有容器:docker start $(docker ps -aq)
  • 进入Postgres容器验证数据:docker exec -it <容器名> psql -U <用户名> -d <数据库名>,执行简单查询确认数据完整

只读磁盘特殊处理

若rsync因磁盘损坏无法读取部分文件:

  • 跳过损坏文件继续复制:rsync -avxP --ignore-errors /var/lib/docker/ /new-disk/docker/
  • 单独备份Postgres数据:若容器可进入,执行docker exec <容器名> pg_dump -U <用户名> <数据库名> > /new-disk/pg-backup.sql,后续在新容器中通过cat /new-disk/pg-backup.sql | docker exec -i <新容器名> psql -U <用户名> -d <数据库名>恢复

后续收尾

  • 更新fstab让新磁盘开机自动挂载:用blkid /dev/sdb获取UUID,在/etc/fstab添加一行:UUID=<获取到的UUID> /new-disk ext4 defaults 0 0
  • 确认服务正常后,可卸载旧磁盘(如不需要):umount /dev/sda(替换为实际旧磁盘路径)

内容的提问来源于stack exchange,提问作者Mlgarate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:57:31