如何在Django里面迁移数据库Docker

How to migrate database in Django inside Docker

我有一个 docker-compose 项目,其中包含两个容器 运行ning NGINX 和 gunicorn 以及我的 django 文件。 我在 AWS RDS 的 docker 之外还有一个数据库。 我的问题类似于 。但是,该问题与 docker-compose 中的数据库有关。我的在外面。

所以,如果我要为我的容器打开一个 bash 终端并且 运行 py manage.py makemigrations 问题将是 django 项目中的迁移文件,例如:/my-django-project/my-app/migrations/001-xxx.py 将与存储已应用迁移的数据库不同步。这是会发生的,因为我的容器可以随时关闭并打开一个新容器。并且不会保存迁移文件。

我的想法是:

我正在寻找有关如何处理迁移的良好做法的建议。

编辑:

这里是 docker-compose.yml,我在本地 运行 使用 docker-compose up 进行此操作,并使用 docker compose up 在 AWS ECS 中进行生产。我遗漏了一些我认为无关紧要的 aws-cloudformation 配置。

docker-compose.yml

version: '3'

services:
  web:
    image: <secret>.dkr.ecr.eu-west-3.amazonaws.com/api-v2/django:${IMAGE_TAG}
    build:
      context: .
      dockerfile: ./Dockerfile
    networks: 
      - demoapp
    environment:
      - DEBUG=${DEBUG}
      - SECRET_KEY=${SECRET_KEY}

  nginx:
    image: <secret>.dkr.ecr.eu-west-3.amazonaws.com/api-v2/nginx:${IMAGE_TAG}
    build:
      context: .
      dockerfile: ./nginx.Dockerfile
    ports:
      - 80:80
    depends_on:
      - web
    networks: 
      - demoapp

问题归结为我将 Django 在 py manage.py makemigrations 和 when/where 上生成的迁移文件存储在何处,我将 运行 py manage.py migrate。正如 404pio 所建议的那样,您可以像 GitHub.

一样将它们简单地存储在您的代码仓库中

所以我的工作流程是这样的:

  1. 在我的本地开发环境中,运行 py manage.py makemigrationspy manage.py migrations,(目标是像 sqlite 这样的开发数据库)。
  2. 如果一切正常,提交并推送到 git。
  3. (我正在使用 CircleCI 来测试和部署我的 Django 项目,但这也可以手动完成。)CircleCI 运行s 管道在 git 推送之后。在管道中,我将 运行 py manage.py migrate 作为最后一步。这必须在部署应用程序之后进行,因为这可能会失败,然后您不想迁移。