我有一个docker compose项目,有两个运行nginx和gunicorn的容器和我的django文件。我也有一个数据库以外的docker在aws rds。我的问题和这个相似。但是,这个问题与docker compose中的数据库有关。我的在外面。
所以,如果我为我的容器打开一个bash终端并运行 py manage.py makemigrations
问题是django项目中的迁移文件,例如: /my-django-project/my-app/migrations/001-.py
将与存储已应用迁移的数据库不同步。这将发生,因为我的容器可以关闭和打开一个新的容器在任何时候。迁移文件将不会保存。
我的想法是:
使用 volume
在docker compose内部,但由于migrations文件夹分布在所有django应用程序上,这可能很难实现。
在docker之外处理迁移,这需要某种“主”项目来存储迁移文件。这似乎不是一个好主意,因为整个项目将依赖于一些现有的本地文件。
我正在寻找关于如何处理迁移的良好实践的建议。
编辑:
这是docker-compose.yml,我正在本地运行 docker-compose up
并在生产中使用 docker compose up
. 我遗漏了一些我认为无关紧要的配置。
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
1条答案
按热度按时间am46iovg1#
问题归结为我将django生成的迁移文件存储在哪里
py manage.py makemigrations
我什么时候/在哪里跑步py manage.py migrate
. 正如404pio所建议的,您可以像github一样简单地将这些存储在代码repo中。所以我的工作流程是这样的:
在我的本地开发环境中,运行
py manage.py makemigrations
以及py manage.py migrations
,(目标是像sqlite这样的开发数据库)。如果一切正常,提交并推到git。
(我正在使用circleci测试和部署我的django项目,但这也可以手动完成。)circleci在git push之后运行管道。在管道中,我已经作为最后一步运行
py manage.py migrate
. 这必须在应用程序部署之后进行,因为这可能会失败,然后您不想迁移。