【发布时间】:2021-01-23 13:31:21
【问题描述】:
我在 docker-compose 设置中运行 Django 和 PostgreSQL 以进行开发。每次我重新启动应用程序容器时,数据库都是空的,即使我没有重新启动 DBMS 容器,也没有删除 DBMS 的数据量。似乎 Django 在重新启动时删除了所有表。为什么?
我的设置与here 的描述非常接近。也就是说,我的 compose 文件如下(简化):
version: '3.8'
services:
db:
image: postgres
environment:
- POSTGRES_DB=db_dev
- POSTGRES_USER=dev
- POSTGRES_PASSWORD=postgres
volumes:
- type: volume
source: app-data
target: /var/lib/postgresql/data
app:
build: .
command: python manage.py runserver 0.0.0.0:8888
container_name: app
environment:
- DATABASE_URL
- PYTHONDONTWRITEBYTECODE=1
- PYTHONUNBUFFERED=1
volumes:
# Mount the local source code folder for quick iterations.
# See: https://www.docker.com/blog/containerized-python-development-part-3/
- type: bind
source: .
target: /code
ports:
- target: 8888
published: 8888
depends_on:
- db
env_file:
- ./dev.env
volumes:
app-data:
external: true
Django 应用程序通过entrypoint.sh 启动:
#! /bin/sh
if [ "$DATABASE" = "postgresql" ]
then
echo "Waiting for postgres..."
while ! nc -z $SQL_HOST $SQL_PORT; do
sleep 0.1
done
echo "PostgreSQL started"
fi
doMigrate=${DB_MIGRATE:-false}
if [ "$doMigrate" = true ] ;
then
python manage.py flush --no-input
python manage.py migrate
fi
exec "$@"
在开发设置中,我设置了DB_MIGRATE=true 和DEBUG=1。
【问题讨论】:
-
简单的卷描述在这种情况下适用于我:
volumes: - app-data:/var/lib/postgresql/data -
@AndreyBorzenko,我更改了
volumes声明,但无济于事。我还将DB_MIGRATE设置为false并禁用了DEBUG模式。尽管如此,当我在app容器上执行docker-compose restart时,数据库已经消失了。
标签: django postgresql docker-compose django-migrations drop-table