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

Docker Compose v2下容器重启后数据卷被覆盖问题求助

解决Docker Compose v2下数据库卷数据丢失问题

核心原因

你的配置中仅挂载了初始化脚本目录,但没有为数据库的核心数据目录配置持久化卷。PostgreSQL默认将数据存储在容器内的/var/lib/postgresql/data路径,WikiJS的SQLite数据通常存储在容器内的/wiki/data路径——如果不挂载这些路径到宿主机或命名卷,容器销毁后数据会随容器层一起被清除。

而docker-compose v1和v2对匿名卷的处理存在差异:v1默认保留匿名卷,v2在服务配置变更或某些场景下会重新创建匿名卷,导致数据丢失。


修复PostgreSQL数据丢失

修改docker-compose.yml的db服务配置,添加命名卷挂载核心数据目录:

services:
  db:
    image: postgres:latest
    volumes:
      - ./initialization-scripts:/docker-entrypoint-initdb.d/
      - postgres-db-data:/var/lib/postgresql/data  # 新增:持久化数据库数据
    environment:
      - POSTGRES_PASSWORD=your-db-password  # 必须设置密码,否则容器启动失败

# 在文件顶层定义命名卷
volumes:
  postgres-db-data:

修复WikiJS SQLite数据丢失

同理,为WikiJS添加数据目录的持久化卷:

services:
  wikijs:
    image: requarks/wiki:latest
    volumes:
      - wikijs-data:/wiki/data  # 挂载WikiJS数据目录(包含SQLite文件)

# 顶层定义命名卷
volumes:
  wikijs-data:

关键注意事项

  • 执行docker compose down时不要加-v/--volumes参数,该参数会强制删除所有关联卷。
  • 命名卷是Docker管理的持久化存储,不会被down命令默认删除,跨版本兼容性更好,比绑定挂载更稳定。
  • 第一次启动时,容器会自动将初始化数据写入命名卷,后续启动会直接复用已有数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:20:14