【问题标题】:BackUp Dockerized PostreSQL Database备份 Dockerized PostgreSQL 数据库
【发布时间】:2020-07-23 11:07:06
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: docker docker-compose pgadmin


    【解决方案1】:

    您可以将容器内的文件夹挂载到主机文件夹,并使用 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
    

    关于卷的更多信息:

    【讨论】:

    • 这个本地安装的卷运行良好。谢谢
    【解决方案2】:

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

    停止容器并移除容器、网络、卷和图像 由 up 创建。

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

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

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

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

    【讨论】:

    • 谢谢,这完全意味着我误解了 -v 参数。我发现我这边的卷安装不正确,这就是为什么我的数据过去每次 docker-compose down 都会丢失的原因。
    猜你喜欢
    • 2014-09-03
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 2015-06-29
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多