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

17 浏览
0 Comments

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

我按照Docker官方网站上的Django快速入门指南,搭建了一个Docker Django/PostgreSQL应用。第一次运行Django的manage.py migrate命令(sudo docker-compose run web python manage.py migrate),结果符合预期,数据库成功建立在Docker PostgreSQL容器中。\n对Django应用进行的更改也会立即反映在Docker Django容器中,这非常棒!\n但是,如果我在Django中更改了模型,并尝试更新Postgres数据库以与模型匹配,不会检测到任何更改,因此无论运行多少次makemigrations或migrate命令,都不会进行迁移。\n基本上,每次更改Django模型时,我都必须删除Docker容器(使用sudo docker-compose rm命令),然后重新开始新的迁移。\n我仍在努力理解Docker,有很多我不理解它的工作原理,但这个问题让我发疯。为什么迁移没有看到我的更改?我做错了什么?

0
0 Comments

问题的出现的原因:在使用Docker-Compose时,如何执行Django数据库迁移。

解决方法:通过以下步骤可以执行Django数据库迁移。

1. 确保你的堆栈正在运行,然后使用一次性的docker-compose run命令执行迁移命令。例如:

#假设Django容器的名称为web
docker-compose run web python3 manage.py migrate

这对于内置(默认)的SQLite数据库非常有效,也适用于作为依赖项列在docker容器中的外部数据库。下面是一个示例docker-compose.yaml文件:

version: '3'

services:

db:

image: postgres

web:

build: .

command: python manage.py runserver 0.0.0.0:8000

volumes:

- .:/code

ports:

- "8000:8000"

depends_on:

- db

以上就是使用Docker-Compose执行Django数据库迁移的方法。你可以在https://docs.docker.com/compose/reference/run/中找到更多信息。这是我认为最简洁的方法。

0
0 Comments

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

出现的原因:

- 需要在运行Django服务之前执行数据库迁移

- 需要确保迁移服务在数据库服务之后运行

解决方法:

- 使用Docker的层次结构,在设置数据库并在运行主服务之前运行迁移服务

- 使用build: .来构建迁移服务的镜像

- 迁移服务和Web服务共享同一个镜像,确保从项目中获取所有的迁移内容,避免问题

- 使用depends_on确保迁移服务在Web服务之前启动

代码示例:

services:
  web:
    build: .
    image: uzman
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "3000:3000"
      - "8000:8000"
    volumes:
      - .:/code
    depends_on:
      - migration
      - db
  migration:
    image: uzman
    command: python manage.py migrate --noinput
    volumes:
      - .:/code
    depends_on:
      - db

这种方法避免了使用入口点或其他方式来执行迁移。然而,depends_on只能保证迁移服务在Web服务之前启动,并不能确保迁移服务在Web服务启动之前已经完成了所有的迁移操作。因此,在数据库启动时间较长或迁移时间较长的情况下,仍可能出现问题。

0
0 Comments

问题的原因是在使用Docker-Compose时,如何执行Django数据库迁移。解决方法是通过以下步骤:

1. 构建Docker容器栈:`docker-compose build -f path/to/docker-compose.yml`

2. 启动Docker容器栈:`docker-compose up -f path/to/docker-compose.yml`

3. 显示正在运行的Docker容器:`docker ps`

4. 获取Django应用的容器ID并登录:`docker exec -t -i 66175bfd6ae6 bash`

5. 进入正确的文件夹:`cd path/to/django_app`

6. 每次编辑模型后,在容器中运行以下命令:`python manage.py makemigrations` 和 `python manage.py migrate`

7. 使用Docker-Compose的docker-entrypoint.sh文件自动运行以下操作:

- `collectstatic`:收集静态文件

- `migrate`:应用数据库迁移

- `runserver`:启动服务器

8. 重新执行步骤1-6,如果仍然无法正常工作,则可以尝试重新构建容器。

文章中还提到,在开发环境中自动运行数据库迁移是可以接受的,但在部署环境中是不推荐的。此外,还建议将代码放入Django容器使用的卷中,并提供了在docker-compose.yml文件中使用Dockerfile的替代方法。

总结文章中的内容,使用Docker-Compose时执行Django数据库迁移的方法如下:

1. 构建Docker容器栈:`docker-compose build -f path/to/docker-compose.yml`

2. 启动Docker容器栈:`docker-compose up -f path/to/docker-compose.yml`

3. 获取Django应用的容器ID并登录:`docker exec -t -i 66175bfd6ae6 bash`

4. 进入正确的文件夹:`cd path/to/django_app`

5. 每次编辑模型后,在容器中运行以下命令:`python manage.py makemigrations` 和 `python manage.py migrate`

6. 使用Docker-Compose的docker-entrypoint.sh文件自动运行数据库迁移和启动服务器。

注意:在开发环境中自动运行数据库迁移是可以接受的,但在部署环境中是不推荐的。

0