首页 > 解决方案 > 备份 Dockerized PostreSQL 数据库

问题描述

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

我想为我的数据库进行备份以防止数据丢失。所以我想从 Pgadmin 界面创建备份,但这会在容器本身内创建一个备份文件。

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

谢谢

标签: dockerdocker-composepgadmin

解决方案


首先,对于生产用途,您不使用docker-composedocker 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 :

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

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

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

通过这种方式,您可以将卷生命周期与容器分离。有关卷的文档还解释了如何使用卷驱动程序在必要时访问远程文件系统和备份卷:https ://docs.docker.com/storage/volumes/

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


推荐阅读