备份Dockerized PostreSQL数据库

时间:2020-07-23 11:07:06

标签: docker docker-compose pgadmin

我有一个基于docker-compose的Postgresql容器,以及Pgadmin

我想为我的数据库做备份以防止数据丢失。 因此我想从Pgadmin界面创建备份,但这将在容器本身内部创建一个备份文件。

我试图弄清楚的是, 在错误运行docker-compose down的情况下如何创建备份?这将删除附加到docker-compose文件的所有卷。

谢谢

2 个答案:

答案 0 :(得分:1)

首先,对于生产用途,您不使用docker-compose,而是使用docker swarm或kubernetes。 docker-compose用于测试,因此,您不应使用docker-compose管理生产或什至必须具有SLA(例如无数据丢失)的等效测试系统。

然后docker-compose down不删除卷,要这样做,您需要添加“ -v”选项,例如:

docker-compose down -v

第三,如果要使用不是由docker-compose管理但持续时间很长的持久性卷,请根据文档(https://docs.docker.com/compose/reference/down/)将其声明为 external :< / p>

停止容器并删除容器,网络,卷和映像 由up创建。

默认情况下,唯一删除的内容是:

在“撰写文件”网络中定义的服务容器 在撰写文件的网络部分中 默认网络(如果已使用) 永远不会删除定义为外部的网络和卷。

这样,您就可以将卷生命周期与容器分离。卷上的文档还说明了如何使用卷驱动程序来访问远程文件系统和备份卷(如有必要):https://docs.docker.com/storage/volumes/

因此,如果要备份,请通过shell命令在映射到某个卷的特定文件夹中执行此操作,该卷可能位于远处的文件系统背后,并且本身被认为是安全的(备份和复制)。

答案 1 :(得分:1)

您可以将容器内的文件夹安装到主机文件夹,然后使用pgadmin创建备份,该备份将持久保存在容器外(services: db: volumes: - /folder/in/host:/folder/in/container 对其无效):

/folder/in/container/pg.dump

例如:如果您在/folder/in/host/pg.dump中创建一个备份文件,则该文件也将在主机上以docker volume create --name somename的形式提供


或者您可以使用/var/lib/docker/volumes创建一个卷,该卷将存储在docker-compose down -v中,即使services: db: volumes: - somename:/folder/in/container volumes: somename: external: true 也不会删除:

get_queryset

有关销量的更多信息:

相关问题