繁体   English   中英

Django Docker 如何只在Container中迁移?

[英]Django Docker How to only migrate in Container?

问题可能有点不清楚,所以让我解释一下。 我有一个 Django 项目,这次我想使用 Docker。 所以我从互联网上的教程中对我的项目进行了docker化。

正如 Django 用户所知,如果您想扩展用户 model 您需要在编辑 model 之后进行迁移

所以我正在编辑我的自定义用户 model 并想测试我的 model 的功能。 我想要实现的是,在 Docker 容器上测试我的 Django 应用程序的迁移版本,如果它符合我的需要,我将在本地文件上进行迁移。 但是在我运行docker-compose exec web python manage.py make migrations users命令后,我的本地文件也发生了变化。

所以我的问题是,如果我想在我的应用程序的迁移版本上测试一个功能,我可以在 Docker 容器上测试它,然后在本地机器上迁移吗? 还是我不明白 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 视为具有运行应用程序的就绪环境的虚拟机。 现在问你的问题。

如果您想在每次启动 docker 时运行迁移,您可以这样做

在 docker-compose.yml 所在的相同路径中创建文件entrypoint.sh

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:

有关更多信息,您可以参考这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM