python - Django Docker 如何只在容器中迁移?
问题描述
问题可能有点不清楚,所以让我解释一下。我有一个 Django 项目,这次我想使用 Docker。所以我从互联网上的教程中对我的项目进行了docker化。
正如 Django 用户所知,如果您想扩展用户模型,您需要在之后进行迁移,您可以编辑模型
所以我正在编辑我的自定义用户模型,并想为我的模型测试一个功能。我想要实现的是,在 Docker 容器上测试我的 Django 应用程序的迁移版本,如果它符合我的需要,我将在本地文件上进行迁移。但是在我运行docker-compose exec web python manage.py make migrations users
命令之后,我的本地文件也发生了变化。
所以我的问题是,如果我想在我的应用程序的迁移版本上测试一个功能,我可以在 Docker 容器上测试它,然后在本地机器上迁移吗?还是我不明白docker的逻辑?
码头工人-compose.yml
version: '3.8'
services:
web:
build: ./app
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./app/:/backend/
ports:
- 8000:8000
env_file:
- ./.env.dev
depends_on:
- db
db:
image: postgres:13-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=admin
- POSTGRES_DB=db
- POSTGRES_PASSWORD=password
volumes:
postgres_data:
解决方案
如果你想在每次启动 docker 时运行 migrate ,你可以这样做
entrypoint.sh
在 docker-compose.yml 所在的同一路径中创建一个文件。
entrypint.sh
是一个 bash 文件,其中包含在运行服务器之前要运行的命令,您可以在其中添加以下代码:-
python manage.py migrate --noinput
你的docker-compose.yml
将是
version: '3.8'
services:
web:
build: ./app
command: python manage.py runserver 0.0.0.0:8000
entrypoint: /code/entrypoint.sh # path where you placed your entrypoint.sh file
volumes:
- ./app/:/backend/
ports:
- 8000:8000
env_file:
- ./.env.dev
depends_on:
- db
db:
image: postgres:13-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=admin
- POSTGRES_DB=db
- POSTGRES_PASSWORD=password
volumes:
postgres_data:
有关更多信息,您可以参考这里
推荐阅读
- python - Python:无法理解的 if 循环
- ajax - ESP8266 同时请求多个 HTTP GET
- python - Keras train_on_batch() 不训练模型 vs fit()
- pandas - 将四个合并为数据框后如何创建新的 csv 文件?
- python - 在 Sublimetext 3 中安装 NumPy 包?
- mongodb - 当我查询多个字段然后执行排序时,如何正确设置 MongoDb 索引
- android - 在不改变活动的情况下移动 int
- python - 如何用除自身之外的任何其他字母或python中的相邻字母替换字符串中的字母
- javascript - 反应 onClick setState 然后运行函数
- centos7 - 端口打开时 telnet 超时