【问题标题】:docker-compose volume won't persist datadocker-compose 卷不会保留数据
【发布时间】:2019-09-04 06:26:18
【问题描述】:

我正在使用 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

【问题讨论】:

  • 同样的问题
  • 我的问题是我在入口点脚本中刷新数据库...我从一些教程中复制它并且很长时间没有注意到它

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


【解决方案1】:

我想在评论中给予@marke 更多的可见性,但要完全归功于@marke。我遇到的问题是我正在刷新入口点中的数据库。在 django 中,我正在运行 python manage.py flush,它会重置数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 2016-10-08
    • 2021-11-29
    • 2021-09-11
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多