从 library/postgres 保存数据库状态

max*_*max 0 docker

我知道我可以将postgres图像的默认文件夹更改为指向一个卷 - 在这种情况下,显然该卷将持续存在。但我没有这样做,因为我想了解这个图像的默认行为。

所以我只是跑了:

# in one terminal
docker pull postgres
# as a foreground process:
docker run -P --name dev_db postgres

# in another terminal
docker run --rm -it --link dev_db:dev_db /bin/bash
# in this container, I created some databases and added some data to them
# then:
# docker stop dev_db
# docker commit -m "Add data" dev_db postgres_with_data
Run Code Online (Sandbox Code Playgroud)

我以为结果,新图像postgres_with_data将包含我添加的数据;但事实并非如此。提交容器时不应该保存吗?如果没有,它去了哪里,我该如何保存?

更新

感谢您的回答。因此,如果我理解正确,当我停止容器时,/var/lib/postgresql/datapostgres Dockerfile执行后写入的任何内容都会VOLUME /var/lib/postgresql/data消失?

似乎VOLUMEDockerfile 中的命令等效于docker run -P --name dev_db -v $(docker volume create):/var/lib/postgresql/data postgres. 但是我希望docker volume create在容器停止时创建的卷实际上不会消失;事实上,我认为即使根据文档删除容器,它也不会消失:

即使容器本身被删除,数据量也会持续存在。

我错过了什么?

小智 6

我不知道是否为时已晚,但是如果您希望数据保留在 docker 容器内,您可以将 pgdata 目录指向除现在指向的位置之外的任何位置...因此不查看卷而不是重置:

docker run -e PGDATA=/var/lib/postgresql/pgdata

而不是 PGDATA=/var/lib/postgresql/data

在 FROM library/postgres:9.5 repo 上为我工作。