我有以下撰写文件,来自这个项目:
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 应该从那里获取数据库。