Postgresql 如何确保docker compose不会删除包含postgres数据的卷

Postgresql 如何确保docker compose不会删除包含postgres数据的卷,postgresql,docker,docker-compose,Postgresql,Docker,Docker Compose,我正在用docker compose运行一个简单的django Web应用程序。我在docker-compose.yml文件中定义了web服务和db服务: version: "3.8" services: db: image: postgres volumes: - postgres_data:/var/lib/postgresql/data environment: - POSTGRES_DB=postgres

我正在用docker compose运行一个简单的django Web应用程序。我在docker-compose.yml文件中定义了
web
服务和
db
服务:

version: "3.8"

services:
  db:
    image: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8000:8000"
    env_file:
      - ./.env.dev
    depends_on:
      - db

volumes:
  postgres_data:
我通过运行以下命令启动服务:

docker-compose up -d
我可以使用为我的应用程序编写的自定义django命令在其中加载一些数据。在localhost:8000上,一切都正常运行(有数据)

然而,当我跑的时候

docker-compose down
(因此没有
-v
)然后再次

docker-compose up -d
数据库再次为空。该卷未被持久化。从我在中以及在SO的几篇文章中所读到的内容来看,在启动新容器时持久化卷并重用它应该是默认行为(如果我理解正确,可以使用
--renew anon volumes
标志禁用该行为)

但是,在我的例子中,该卷不会持久化。也许是,但我的数据不见了

通过执行
docker volume ls
我可以看到,在执行
docker compose down
命令后,我的卷(我将在此处使用名称
my_volume
)仍然存在。但是,
CreatedAt
值已更改。这让我觉得这是一个同名的不同卷,我的数据已经不存在了,但我不知道如何确认这一点

建议在
/var/lib/postgresql
而不是
/var/lib/postgresql/data
上装载卷。然而,我看到了其他资源(如)中提出了相反的建议。我两个都试过了,但两个选项都不起作用


感谢您的建议。

我的应用程序的Dockerfile使用了一个入口点,其中执行了以下命令:
python manage.py flush
,它清除数据库中的所有数据。由于每次启动应用程序容器时都会执行此操作,因此会清除所有数据。这与docker compose无关