You need to enable JavaScript to run this app. DigitalOcean环境下docker-compose数据库持久化配置失效问题
优惠活动
大模型
产品
解决方案
定价
更多

DigitalOcean环境下docker-compose数据库持久化配置失效问题

问题原因

你在当前工作目录创建的符号链接postgres_data对Docker命名卷完全无效。Docker的命名卷由Docker守护进程统一管理,默认存储路径为/var/lib/docker/volumes/<卷名>/_data,不会读取当前工作目录下的同名文件/软链接,因此你的PostgreSQL数据一直存储在Droplet的系统盘而非你挂载的块存储卷,清理容器时如果同时删除了命名卷,数据就会彻底丢失。

解决方法

两种方案二选一即可:

方案1:改用绑定挂载(操作最简单,推荐)

  • 首先在持久化卷上创建专属存储目录,配置正确权限(PostgreSQL官方镜像默认运行用户UID为70,必须匹配权限否则会启动失败):
sudo mkdir -p /mnt/volume_fra1_01/postgres_data
sudo chown 70:70 /mnt/volume_fra1_01/postgres_data
  • 修改docker-compose.yml配置:将db服务的卷挂载改为绑定挂载,同时删除底部全局的postgres_data命名卷声明
db:
    image: postgres:12.0-alpine
    volumes:
      - /mnt/volume_fra1_01/postgres_data:/var/lib/postgresql/data/
    env_file:
      - ./postgres/.env

# 原来底部的volumes.postgres_data声明直接删除即可
  • 重新启动服务即可生效:docker-compose up -d

方案2:为命名卷指定挂载路径(保留原命名卷用法)

如果不想修改服务层的卷挂载配置,可以给命名卷显式指定挂载点到你的持久化卷:

  • 先执行上述方案1里的目录创建和权限配置命令
  • 修改docker-compose.yml底部全局的volumes配置:
volumes:
  postgres_data:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: /mnt/volume_fra1_01/postgres_data
  • 清理旧的同名命名卷(注意:如果旧命名卷里有需要保留的数据,先执行docker cp把旧数据拷贝到新目录后再执行以下命令):
docker-compose down -v
docker volume prune
  • 重新启动服务即可生效:docker-compose up -d

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 20:36:04