Docker 容器停止时数据库丢失。如何恢复?

Docker 容器停止时数据库丢失。如何恢复?

我有以下撰写文件,来自这个项目

version: "3"

volumes:
  static-files:
    driver: local
  postgres:
    driver: local

services:
    db:
      image: postgres:11.1
      volumes:
        - postgres:/var/lib/postgresql/data/pgdata
      env_file:
        - ./config/environment/development.env
      expose:
        - "5432"

    webapp:
      build:
        context: webapp
      volumes:
        - ./webapp/covidoff:/srv/covidoff
        - static-files:/srv/static-files
      ports:
        - "8000:8000"
        - "80:8000"
      depends_on:
        - db
      env_file:
        - ./config/environment/development.env

如您所见,有两个服务正在启动:一个 PostgreSQL 数据库db和一个 Django webapp。到目前为止,一切都运行良好,除了一件事:每次我停止容器时db数据都会丢失。

有人告诉我尝试postgres:/var/lib/postgresql/data而不是postgres:/var/lib/postgresql/data/pgdata,但是那也不起作用。

问题是:该服务器已经上线并有数据。我该如何解决持久性问题并保留当前数据?

有一些进展。一个简单的更改使得数据在容器停止后仍然存在,我只是不确定为什么。我替换了这个:

PGDATA=pgdata

有了这个:

PGDATA=/var/lib/postgresql/data/pgdata

在我的env文件中。但是为什么这样做有效呢?

答案1

docker 卷驱动程序不会在服务重新启动之间保留您的数据。您可以使用本地持久驱动程序;我已多次使用此用例。

如果您已经在某处拥有数据,则可以在启动服务之前创建卷,并将数据复制到指定目录。Postgres 应该从那里获取数据库。

相关内容