docker-compose卷将不会保留数据

时间:2019-04-13 20:07:04

标签: django postgresql docker docker-compose docker-volume

我正在使用docker-compose设置一个nginx-gunicorn-django- postgres 项目。

我有一个带有postgres的容器,我想使数据持久化。因此,例如,当我执行docker-compose ... start/stop/up/down时,我希望数据库仍然存在。我已经读到我应该像在production.yaml中那样使用卷来实现此目的:

version: '3.7'

services:
  web:
    build:
      context: .
      dockerfile: docker-compose/django/Dockerfile

    command: gunicorn config.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - static_volume:/usr/src/app/staticfiles
      - media_volume:/usr/src/app/mediafiles
    expose:
      - 8000
    environment:
      - SECRET_KEY=please_change_me
      - SQL_ENGINE=django.db.backends.postgresql
      - SQL_DATABASE=postgres
      - SQL_USER=postgres
      - SQL_PASSWORD=postgres
      - SQL_HOST=db
      - SQL_PORT=5432
    depends_on:
      - db

  db:
    image: postgres:10.5
    restart: always
    volumes:
      - /home/username/postgres_data:/var/lib/postgresql/data

  nginx:
    build: ./docker-compose/nginx
    volumes:
      - static_volume:/usr/src/app/staticfiles
      - media_volume:/usr/src/app/mediafiles
    ports:
      - 80:80
    depends_on:
      - web

volumes:
  static_volume:
  media_volume:

问题在于,每当我执行docker-compose -f production.yaml stop然后再次启动时,数据库都是空的,除了迁移:(。 我不知道如何解决这个问题。我想容器可能没有写卷的权限?另一方面,当我第一次启动容器时,一切运行良好,一切都在数据库中,依此类推。只有在docker-compose ... stop/down之后,数据库才会被清除(再次迁移仍然存在)。

我在这里想念什么?

docker-compose版本:1.24.0, 码头工人版本:18.09.2

1 个答案:

答案 0 :(得分:1)

我想让此内容更具可见性,但要在评论中将@marke完全归功于此。我遇到的问题是在入口点刷新数据库。在django中,我正在运行python manage.py flush来重置数据库。