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

移动docker-compose.yml后Postgres数据库原有表丢失如何解决

问题原因

Docker Compose 默认会将当前工作目录的名称作为项目名,所有命名卷、容器、网络的名称都会自动加上{项目名}_前缀。
你最初在~/postgres目录启动服务时,生成的Postgres数据卷实际名称为postgres_database-data;当你把配置文件移动到用户根目录~/后,项目名变成了根目录对应的名称(通常为你的用户名),Compose会自动新建一个名为{用户名}_database-data的空卷挂载到新容器,所以看不到原有数据。

解决方案

操作前请先分别进入~/postgres和~/目录执行docker-compose down停止所有相关运行中的容器,避免多容器同时挂载同一卷导致数据损坏。

方案1:指定原有项目名启动(最简单,无需修改配置文件)

在~/目录执行启动命令时,额外添加-p参数指定项目名为原来的postgres即可:

docker-compose -p postgres up -d

如果不想每次都加参数,可以在~/目录的docker-compose.yml同级新建.env文件,添加一行配置:

COMPOSE_PROJECT_NAME=postgres

后续直接执行docker-compose up -d就会自动复用原有项目的所有资源。

方案2:显式声明卷为已存在的外部卷

修改~/目录下的docker-compose.yml,将底部volumes段的database-data配置改为如下内容,明确指定使用原有旧卷:

volumes:
  database-data:
    external: true
    # 此处填写实际的旧卷名,可通过docker volume ls命令查看确认,通常为postgres_database-data
    name: postgres_database-data
  webapp:

修改完成后直接执行docker-compose up -d启动即可。

内容的提问来源于stack exchange,提问作者Eric.M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:57:03