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

执行docker compose up -d --build会清空PostgreSQL数据库?求排查

Docker Compose执行up -d --build后PostgreSQL数据丢失排查

问题描述

我给Django应用和PostgreSQL数据库配置了Docker Compose,每次有新迁移时,执行docker compose up -d --build会导致数据库数据被清空。想排查问题原因,是不是--build参数导致的?

我的docker-compose.yaml配置:

version: "3.9"

services:
  db:
    image: postgis/postgis:14-3.2
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=db
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=123456
    ports:
      - "5434:5432"

  web:
    restart: always
    build: .
    command:
      sh -c "python manage.py migrate  &&
             python manage.py runserver 0.0.0.0:8000"
    volumes:
      - .:/code
    ports:
      - "7000:8000"
    environment:
      - POSTGRES_NAME=db
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=123456
      - UPLOAD_LOCATION_MEDIA=/srv/app/cdn/media
      - UPLOAD_LOCATION_IMAGE=/srv/app/cdn/image
    depends_on:
      - db

核心结论:--build不会导致数据清空

--build仅负责重新构建Django应用的镜像,只作用于web服务,和PostgreSQL容器的数据存储完全无关,不会触发数据库数据删除。

可能的问题原因及排查步骤

1. 数据卷挂载异常

PostgreSQL依赖./data/db本地目录持久化数据,如果挂载失败,容器会自动使用临时存储,重启后数据直接丢失:

  • 检查主机./data/db目录:正常情况下该目录应包含PostgreSQL核心文件(如base文件夹、pg_hba.conf配置文件),如果为空,说明挂载未生效。
  • 修复目录权限:PostgreSQL容器内运行的postgres用户UID为999,若主机目录权限不匹配,容器无法读写会切换到临时存储。执行以下命令修正:
    sudo chown -R 999:999 ./data/db
    
  • 验证挂载状态:执行docker inspect db,查看Mounts字段下的Source是否指向主机的./data/db,Mode是否为rw(可读写)。

2. 迁移文件存在危险逻辑

新生成的迁移文件可能包含清空或删除数据的操作:

  • 检查app/migrations/下的最新迁移文件,看是否有删除表、删除字段的代码,或者RunPython块里写了批量删除数据的逻辑。
  • 确认migrate命令参数:你的web服务命令是python manage.py migrate,无--fake、--reset这类危险参数,但迁移文件本身的逻辑可能导致数据丢失。

3. PostgreSQL容器被意外重置

  • 排查是否执行过docker compose down -v:该命令会删除所有数据卷(包括db的本地挂载卷),直接导致数据丢失。
  • 查看db容器日志:执行docker compose logs db,如果每次启动都出现initializing database的日志,说明容器每次都在重新初始化,即数据卷未正常工作。

4. 其他可能性

  • 检查是否有部署脚本或工具执行了flush、reset_db等清空数据库的命令。
  • 确认db容器未被强制重建:docker compose up -d --build默认不会重建db容器,除非修改了db服务的配置(如镜像版本、环境变量),但即使重建,只要数据卷正常挂载,数据也不会丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:00:19