0

我正在使用dbdocker-compose开发一个 django 项目。postgres

使用 VS Code,我得到了两个在Docker Compose Up.

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

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

我必须运行python manage.py migrate并且createsuperuser数据库是空的。

我可以理解,web当对 进行更改时,必须重新创建 docker 映像requirements.txt,但是为什么 db 映像会重置?

有没有办法避免这种情况?我讨厌发布生产应用程序,并且无法在不丢失数据库的情况下在较新版本中安装其他库。

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,
    }
}
4

1 回答 1

2

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

  1. 在旁边创建database目录 ( )mkdir databasedocker-compose.yml
  2. 编辑您的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 图像文档。特别是:“在哪里存储数据”一章

于 2020-04-06T10:24:40.937 回答