1

我有一个使用 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 更改列名吗?

4

1 回答 1

0

从您的问题和评论中,我得到的印象是您的 django 没有使用正确的数据库。或者更有可能(而不是两个共存的数据库实例),即使 docker-compose 文件看起来不像,但每次 docker 重新启动时都会重新创建数据库。

我们正在使用适合我们的类似设置,但数据量的安装方式不同 - 所以这可能是这里的问题:

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

设置.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
于 2017-01-31T14:52:45.030 回答