docker -составить сбрасывает django дБ при изменениитекст - PullRequest
0 голосов
/ 06 апреля 2020

Я использую docker-compose для разработки django проекта с postgres дБ.

Используя VS Code, я запускаю два докера после Docker Compose Up.

Каждый Когда я работаю над проектом, БД не повреждена

Проблема в том, что при внесении каких-либо изменений в requirements.txt изображение БД сбрасывается, даже если в это изображение не было внесено никаких изменений. * Я должен запустить python manage.py migrate и createsuperuser, а база данных пуста.

Я могу понять, что образ web docker должен быть воссоздан, когда есть изменения в requirements.txt, но почему сбрасывает ли изображение БД?

Есть ли способ избежать этого? Я бы не хотел публиковать sh производственное приложение и не иметь возможности устанавливать дополнительные библиотеки в более новых версиях без потери БД.

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

1 Ответ

2 голосов
/ 06 апреля 2020

Вы должны создать постоянный том для своей базы данных и хранить его где-нибудь на вашем хосте. В приведенном ниже примере - каталог database в каталоге docker-compose.yml.

  1. Создайте каталог database (mkdir database) рядом с docker-compose.yml
  2. Отредактируйте свой docker-compose.yml file:

    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 image документацию о хранении данных. Особенно: глава «Где хранить данные»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...