我正在通过尝试创建轮询应用程序来学习 Django described on the Django's website .同时,我是第一次使用 Docker,我在尝试使这个应用程序使用的 PostgreSQL 数据库持久化时遇到了问题。
按照Django使用Docker的提示,找到on the Docker website ,我正在使用 docker-compose 运行两项服务:一项处理数据库,另一项处理应用程序本身(至少我是这样理解的)。我尝试在数据库容器内的/var/lib 目录中安装一个卷,我在其中找到了 PostgreSQL 目录。虽然这个目录变得持久化,我通过创建一些虚拟文件来检查它,但每次我重新启动这些容器时,通过 Web 服务完成的迁移都会被删除。
下面是我的 docker-copmpose.yml
文件和 Django 的 settings.py
。我应该怎么做才能使这个数据库持久化?
#docker-compose.yml
version: '3'
services:
db:
image: postgres
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
volumes:
- .:/code
- .:/var/lib
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
#(...)
# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
#(...)
最佳答案
docker 中的数据持久化可能很棘手,但这里有 2 种可能的解决方案:
- 别担心,docker 会搞定的。在您的情况下,由于您使用的是撰写文件,因此只要您不清理卷并且使用“docker-compose down”停止 docker 撰写,就不会有任何问题。一旦您将使用“docker-compose up”,您的数据应该仍在数据库中。
- 您想要更多的控制权(并且可能轻松地共享数据)。在这种情况下,您可以选择手动挂载将存储数据的文件。为此,您可以了解更多信息 here (在页面底部)。提示:
卷: -/my/own/datadir:/var/lib/postgresql/data
我希望能回答你的问题:)
关于django - 在 Docker 中持久化 Django 的 PostgreSQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62328194/