备份 Dockerized PostgreSQL 数据库

BackUp Dockerized PostreSQL Database

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

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

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

谢谢

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

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

docker-compose down -v

第三,如果您想使用不受 docker-compose 管理但长期存在的持久卷,请根据文档将其声明为 external (https://docs.docker.com/compose/reference/down/):

Stops containers and removes containers, networks, volumes, and images created by up.

By default, the only things removed are:

Containers for services defined in the Compose file Networks defined in the networks section of the Compose file The default network, if one is used Networks and volumes defined as external are never removed.

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

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

您可以将容器内的文件夹挂载到主机文件夹,并使用 pgadmin 创建将在容器外持久保存的备份(docker-compose down 对其没有影响):

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

有关卷的更多信息: