gpt4 book ai didi

django - docker-compose在require.txt更改时重置Django数据库

转载 作者:行者123 更新时间:2023-12-02 20:59:43 26 4
gpt4 key购买 nike

我正在使用docker-composepostgres db开发django项目。

使用VS Code,我在Docker Compose Up之后运行了两个 docker 。

每次我在项目上工作时,数据库都是完整的

问题是,当对requirements.txt进行任何更改时,即使未对该数据库镜像进行任何更改,db镜像也会重置。

我必须运行python manage.py migratecreatesuperuser,并且数据库为空。

我可以理解web发生更改时必须重新创建requirements.txt docker镜像,但是为什么要重置数据库镜像?

有办法避免这种情况吗?我不希望发布生产应用程序,并且不能在不丢失数据库的情况下在较新版本中安装其他库。
docker-compose.yml:

version: '3'

services:
db:
image: postgres
environment:
POSTGRES_USER: 'aaa'
POSTGRES_PASSWORD: 'bbb'
POSTGRES_DB: 'ccc'
web:
build: .
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
stdin_open: true
tty: true
Dockerfile:
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'ccc',
'USER': 'aaa',
'PASSWORD': 'bbb',
'HOST': 'db',
'PORT': 5432,
}
}

最佳答案

您应该为数据库创建持久卷,并将其存储在主机上的某个位置。
在下面的示例中-database目录中的目录docker-compose.yml

  • database旁边创建mkdir database目录(docker-compose.yml)
  • 编辑您的docker-compose.yml文件:
    version: '3'

    services:
    db:
    image: postgres
    environment:
    POSTGRES_USER: 'aaa'
    POSTGRES_PASSWORD: 'aaa'
    POSTGRES_DB: 'aaa'
    volumes:
    - ./database:/var/lib/postgresql/data
    web:
    build: .
    volumes:
    - .:/code
    ports:
    - "8000:8000"
    depends_on:
    - db
    stdin_open: true
    tty: true

  • 另外,您可以阅读有关存储数据的postgres图像 documentation。特别是:“存储数据的位置”一章

    关于django - docker-compose在require.txt更改时重置Django数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61057420/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com