Django模型更改不反映在Postgres Docker容器上

我有一个与Docker部署的Django-Postgres应用程序。 我有两个docker容器webdb和一个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更改列名吗?

从你的问题和意见,我觉得你的django没有使用正确的数据库。 或者更可能(而不是两个共存的db实例),即使docker-compose文件看起来不像它,每个docker重新启动时都会重新创build数据库。

我们正在使用一个类似的设置,这对我们来说很合适,但是数据卷的安装方式不同 – 所以这可能是这里的问题:

 - ./pgdata:/var/lib/postgresql/data/pgdata 

settings.py

 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 } } 

泊坞窗,compose.yml

 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