Postgresql 如何确保docker compose不会删除包含postgres数据的卷
我正在用docker compose运行一个简单的django Web应用程序。我在docker-compose.yml文件中定义了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
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无关