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

如何迁移已创建的Docker PostGIS容器默认数据卷至指定位置?

迁移Docker PostGIS数据卷到指定位置的正确步骤

别慌,这个问题其实很常见,我来一步步给你讲清楚怎么操作,确保数据安全迁移,同时让外包承包商能轻松备份数据。核心思路是先停止容器避免数据损坏,然后把现有数据复制到你指定的新位置,最后用新的挂载方式重启容器。

第一步:停止运行中的PostGIS容器

首先必须停止容器,否则直接复制数据可能会导致数据不一致或损坏:

  1. 先找到你的容器ID或名称:
    docker ps
    
  2. 停止容器:
    docker stop <container_id_or_name>
    

方案一:迁移到自定义本地目录(推荐给外包备份,路径明确易访问)

这个方案最适合给外包备份,因为你可以指定一个他们能访问的清晰路径,比如/opt/postgis-backup-data:

  1. 创建目标目录并设置正确权限
    PostgreSQL在容器内用的是postgres用户(UID为999),所以必须确保目标目录的权限让这个用户能读写:

    sudo mkdir -p /opt/postgis-backup-data
    sudo chown 999:999 /opt/postgis-backup-data
    
  2. 复制现有数据卷内容到新目录
    用cp -a参数保留文件的权限和属性,这一步非常关键,否则容器启动会报错:

    sudo cp -a /var/lib/docker/volumes/[your_long_volume_id]/_data/. /opt/postgis-backup-data/
    

    注意把[your_long_volume_id]替换成你实际的卷ID。

  3. 删除旧容器(可选,如果你不需要保留旧容器)

    docker rm <container_id_or_name>
    
  4. 用新挂载目录启动PostGIS容器
    这次启动时用-v参数把你刚创建的目录绑定到容器内的PostgreSQL数据目录:

    docker run -p 5435:5432 -e POSTGRES_PASSWORD=xxxxxxx -e POSTGRES_INITDB_ARGS="-d" -v /opt/postgis-backup-data:/var/lib/postgresql/data mdillon/postgis:9.6
    

方案二:创建命名数据卷(适合Docker生态内管理)

如果你更习惯用Docker的命名数据卷来管理(而不是直接用本地目录),可以用这个方案:

  1. 创建一个命名数据卷

    docker volume create postgis-backup-volume
    
  2. 用临时容器复制数据
    我们用一个临时的busybox容器来安全复制旧卷的数据到新命名卷:

    docker run --rm -v [your_old_volume_id]:/old-data -v postgis-backup-volume:/new-data busybox cp -a /old-data/. /new-data/
    
  3. 停止并删除旧容器,然后用新命名卷启动

    docker stop <container_id_or_name>
    docker rm <container_id_or_name>
    docker run -p 5435:5432 -e POSTGRES_PASSWORD=xxxxxxx -e POSTGRES_INITDB_ARGS="-d" -v postgis-backup-volume:/var/lib/postgresql/data mdillon/postgis:9.6
    

关键验证步骤

启动新容器后,一定要验证数据是否完整:

psql -h localhost -p 5435 -U postgres

输入密码后,用\l查看数据库列表,或者查询你熟悉的表数据,确认所有内容都正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:00:16