当前位置: 首页 > 面试题库 >

使用Docker-Compose时如何执行Django数据库迁移?

端木明贤
2023-03-14
问题内容

我已经按照Docker站点上的Django Quick Start指导紧密设置了Docker Django / PostgreSQL应用程序。

第一次运行Django的manage.py migration时,使用命令sudo docker-compose run web python manage.py migrate可以正常工作。该数据库建立在Docker PostgreSQL容器内就很好了。

当我保存它们时,对Django应用本身所做的更改同样会反映在Docker Django容器中。这很棒!

但是,如果我再改在Django的模型,并尝试更新的Postgres数据库来匹配模型,都没有检测到变化所以没有迁移发生,无论我有多少次运行makemigrations或migrate试。

基本上,每次更改Django模型时,都必须删除Docker容器(使用sudo docker-compose rm),并重新开始新的迁移。

我仍在努力了解Docker,但我对它的工作原理有很多不了解,但这使我发疯。为什么不迁移看到我的更改?我究竟做错了什么?


问题答案:

你只需要登录到正在运行的docker容器并运行命令。

  1. 建立你的堆栈: docker-compose build -f path/to/docker-compose.yml
  2. 启动堆栈: docker-compose up -f path/to/docker-compose.yml
  3. 显示docker正在运行的容器: docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
3fcc49196a84        ex_nginx          "nginx -g 'daemon off"   3 days ago          Up 32 seconds       0.0.0.0:80->80/tcp, 443/tcp   ex_nginx_1
66175bfd6ae6        ex_webapp         "/docker-entrypoint.s"   3 days ago          Up 32 seconds       0.0.0.0:32768->8000/tcp       ex_webapp_1
# postgres docker container ...

获取你的django应用程序的容器ID并登录:

docker exec -t -i 66175bfd6ae6 bash

现在你已登录,然后转到正确的文件夹: cd path/to/django_app

现在,每次编辑模型时,都在容器中运行:python manage.py makemigrations和python manage.py migrate

我还建议你为django docker容器文件使用docker-entrypoint自动运行:

  • collecstatic
  • migrate
  • runserver or start it with gunicorn or uWSGI

这是一个示例(docker-entrypoint.sh)

#!/bin/bash

# Collect static files
echo "Collect static files"
python manage.py collectstatic --noinput

# Apply database migrations
echo "Apply database migrations"
python manage.py migrate

# Start server
echo "Starting server"
python manage.py runserver 0.0.0.0:8000


 类似资料:
  • 问题内容: 我正在尝试分发在几个链接的容器中运行的一组连接的应用程序,这些容器包括一个mongo数据库,该数据库需要: 分发包含一些种子数据; 允许用户添加其他数据。 理想情况下,数据还将保存在链接的数据卷容器中。 我可以使用不装载任何卷的基本实例(dockerhub映像:-本质上是不带该语句的基本mongo Dockerfile )和配置的方式将数据放入容器中: 其中与Dockerfile 位于

  • 我正在使用我的Mac上的docker-compose(使用boot2docker)与官方的WordPress Docker图像一起工作。我需要做一次一次性的数据导入。我不知道该怎么做。如何将数据导入数据库容器?

  • 问题内容: 我想做这样的事情,我可以依次运行多个命令。 问题答案: 想通了,使用 。 例: 多行中的相同示例: 要么:

  • 分发包含一些种子数据; 允许用户添加其他数据。 理想情况下,数据还将持久化在链接的数据卷容器中。 我可以使用不装入任何卷的基实例(dockerhub映像:-这基本上是没有语句的基mongo Dockerfile)和一个配置,将数据放入容器中: 其中与DockerFile位于同一目录()中。 我的docker-compose配置文件包括以下内容: 每当我尝试装入卷时,似乎会删除存储在中的原始种子数据

  • 我正在构建一个Django应用程序,它有几个应用程序。使用SQLite数据库作为后端运行良好。当我试图使用“manage.py migrate”将后端迁移到Oracle时,我发现了以下错误 django.db.utils.DatabaseError:ORA-01950:对表空间“XXXXXX”没有权限 当我在数据库中检查我的用户权限时,它有创建表、视图等的权限。我尝试执行“manage.py sq

  • 我有一篇docker文章。yml,我有一个Postgres数据库,Grafana在上面运行以查询数据。 我用命令docker compose up启动这个compose,但是如果我不想丢失任何数据,我必须运行docker compose stop,而不是docker compose down。 我还阅读了,但“提交操作将不包括安装在容器内的卷中包含的任何数据”,所以我想它对我的需求没有用。 存储创