我有一个部署了Docker的Django-Postgres应用程序。我有两个docker容器web
和db
以及一个用于持久存储的docker卷。
我的docker-compose.yml
文件:
version: '2'
services:
db:
image: postgres
ports:
- '5432:5432'
volumes:
- 'postgres:/var/lib/postgresql/data'
env_file: .env
web:
build: .
command: ./start.sh
volumes:
- .:/app
ports:
- "8000:8000"
depends_on:
- db
env_file: .env
volumes:
postgres:
我改变了我的django model.py
:
class Meeting(models.Model):
[...]
participants = models.CharField(max_length=200)
到
class Meeting(models.Model):
[...]
user_participants = models.CharField(max_length=200)
但是,这个更改没有反映在我的Django应用程序上,我收到以下错误:
列call_meeting.user_participants不存在
我跑了:
python manage.py makemigrations call
python manage.py migrate
然后我尝试删除Django迁移并重新运行上述命令。我试图重新运行docker-compose build
,但没有一个工作。
为什么会这样?我应该用原始SQL更改列名吗?
答案 0 :(得分:0)
从您的问题和评论中,我得到的印象是您的django没有使用正确的数据库。或者更可能(而不是两个共存的数据库实例),即使docker-compose文件看起来不像它,也会在每个docker重新启动时重新创建数据库。
我们正在使用类似的设置,这对我们有用,但数据量的安装方式不同 - 所以这可能是问题所在:
- ./pgdata:/var/lib/postgresql/data/pgdata
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': os.environ.get('POSTGRES_DB', 'my_db'),
'HOST': os.environ.get('POSTGRES_HOST', 'localhost'),
'PORT': os.environ.get('POSTGRES_PORT', '5432'),
'USER': os.environ.get('POSTGRES_USER', 'my_user'),
'PASSWORD': os.environ.get('POSTGRES_PASSWORD', 'my_password'),
'CONN_MAX_AGE': 120
}
}
version: '2'
services:
postgres:
image: postgres:9.5
volumes:
- ./pgdata:/var/lib/postgresql/data/pgdata
environment:
- PGDATA=/var/lib/postgresql/data/pgdata
- POSTGRES_DB=<name> #django.settings.DATABASES['default']['NAME']
- POSTGRES_USER=<user> #django.settings.DATABASES['default']['USER']
- POSTGRES_PASSWORD=<password> #django.settings.DATABASES['default']['PASSWORD']
ports:
- 5432:5432
web:
depends_on:
- postgres
volumes:
- .:/app
environment:
- POSTGRES_HOST=postgres
- POSTGRES_DB=<host> # no need if settings.py is fine
- POSTGRES_USER=<user> # no need if settings.py is fine
- POSTGRES_PASSWORD=<password> # no need if settings.py is fine
build: .
ports:
- 8000:8000
command: ./start.sh