Моя база данных postgresql не сохраняется между запусками docker

Я изучаю docker и postgresql, и у меня возникла проблема с сохранением данных между повторными запусками приложения.

Мой docker-compose.yml:

version: '3.7'

services:
  web:
    build: .
    command: python3 /code/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - 8000:8000
    depends_on:
      - db
  db:
    image: postgres:15
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: postgres
    ports:
      - "5432:5432"

volumes:
  postgres_data:
    external: true

Я запускаю свой проект с docker-compose up -d, перехожу к docker-compose exec web python3 manage.py migrate, но после перехода к docker-compose down и запуска контейнеров мне снова приходится мигрировать. Это очень беспокоит. Кто-нибудь может помочь, пожалуйста?

Проблема, с которой вы столкнулись, связана с тем, что данные вашей базы данных не сохраняются между запусками ваших контейнеров Docker. Это происходит потому, что том, в котором хранятся данные PostgreSQL, удаляется при выполнении команды docker-compose‍‍ down.

Команда docker-compose down останавливает и удаляет контейнеры, сети и, что особенно важно, тома, определенные в вашем файле docker-compose.yml. Поскольку данные PostgreSQL хранятся в томе, при выполнении команды docker-compose down эти данные будут удалены.

Чтобы сохранить данные PostgreSQL между запусками, следует использовать команду docker-compose down с флагом --volumes или -v. Это позволит сохранить ваши тома, а значит и данные PostgreSQL, между запусками. Ваша команда должна выглядеть следующим образом: docker-compose down --volumes.

Альтернативный вариант - использовать команду docker-compose stop, когда нужно остановить контейнеры Docker, не удаляя тома. Когда вы будете готовы снова запустить свои контейнеры, вы можете использовать команду docker-compose start.

Сохранив тома с помощью docker-compose down --volumes или остановив контейнеры с помощью docker-compose stop, ваши данные PostgreSQL будут сохраняться между запусками, избавляя вас от необходимости переносить базу данных каждый раз, когда вы

volumes:
  postgres_data:
    external: true

Знаете ли вы, что это делает? Насколько я знаю, если вы создадите том с помощью команды: docker volume create, вы можете ссылаться на него в своем компе. Так что если вы не знаете, как его использовать, это и вызывает проблему. Как я полагаю, вы не создали том. Поэтому, чтобы все работало правильно, просто удалите строку external: true и позвольте docker управлять вашим томом. И до тех пор, пока вы не используете docker compose down --volumes, ваши данные будут сохраняться.

Вернуться на верх