当前位置: 首页 > 知识库问答 >
问题:

带卷的停靠postgresql

萧德庸
2023-03-14

我对docker比较陌生。我想建立一个postgres数据库,但我想知道如果我重新创建容器,如何确保数据不会丢失。

然后我偶然发现了命名卷(不是绑定卷)以及如何使用它们。但是...在Dockerfile中,您不能使用命名卷。例如data:/var/lib等。正如我使用Dockerfile所理解的那样,它总是一个匿名卷。所以每次我重新创建一个容器时,它都会得到自己的新卷。

所以我的问题来了:

首先:如果容器得到更新或重新创建,如何确保新容器中的postgres数据库引用相同的数据,并且不会丢失对先前创建的匿名卷的引用。

其次:这如何处理yml文件?是否可以将此类数据库容器的多个副本引用到一个卷?(高可用性模式)?

如果有人能给我一个提示或最佳实践,那就太好了。

提前谢谢你。

共有1个答案

陈浩
2023-03-14

查看Postgres的Dockerfile,可以看到它声明了一个卷指令:

VOLUME /var/lib/postgresql/data

每次你运行一个新的Postgres容器,而不指定卷选项,docker就会自动创建一个新的卷。卷具有随机名称。

您可以通过运行命令查看所有卷:

docker volume ls

您还可以通过卷检查存储在主机上的文件,方法是使用以下命令检查主机路径:

docker volume inspect <volume-name>

因此,当您没有为run命令指定--olume选项时,docker会为Dockerfile中声明的所有卷创建卷。如果您忘记命名卷并且数据不应该丢失,这主要是一种安全措施。

首先:如果容器得到更新或重新创建,如何确保新容器中的postgres数据库引用相同的数据,并且不会丢失对先前创建的匿名卷的引用。

如果希望docker使用相同的卷,则需要指定“卷”选项。一旦指定,docker不会创建新卷,它只会将现有卷装载到docker命令中的指定文件夹中。

作为最佳实践,命名包含有价值数据的卷。例如:

docker run --volume postgresData:/var/lib/postgresql/data ...

如果您第一次运行此命令,将创建卷postgresData并将在主机上备份/var/lib/postgresql/data。第二次运行它时,在主机上备份的相同数据将挂载到容器上。

其次:这如何处理yml文件?是否可以将此类数据库容器的多个副本引用到一个卷?

是的,卷可以在多个容器之间共享。您可以将同一个卷装载到多个容器上,这些容器将使用相同的文件。Docker compose允许您这样做。。。

但是,请注意,卷仅限于创建它们的主机。在多台机器上运行容器时,需要从所有机器上访问该卷。有一些方法/工具可以实现这一点,但它们有点复杂。这仍然是Docker中有待解决的限制。

 类似资料:
  • 我有一个小的Spring Boot API在docker中运行。下面显示的是我用来升级容器的命令。 然后,我有一个停靠的JMeter,我使用下面的命令来启动它 但是所有的测试都失败了,请求没有被发送到API。这就是JMeter的CLI的外观 请求的测试配置: 协议:htttp 服务器:localhost 端口:8080 方法:GET 路径:/api/factorial 完整的bash文件如下所示:

  • wxAui是一个包含在wxWidgets API中的高级用户界面库。 Wx.aui.AuiManager是AUI框架中的中心类。 AuiManager使用wx.aui.AuiPanelInfo对象中的每个面板信息管理与特定帧关联的窗格。 让我们了解PanelInfo对象控件对接和浮动行为的各种属性。 将可停靠窗口放在顶层框架中涉及以下步骤 - 首先,创建一个AuiManager对象。 self.m

  • 我正在努力在docker容器内设置nginx。我基本上有两个容器: > 一个php: 7-apache容器,用于动态网站,包括其静态内容。 一个nginx容器,其中装载了一个卷作为/home/www data/static content文件夹(我在docker compose.yml中这样做),以尝试为静态网站提供服务(与apache容器提供的服务无关)。 我想用域dynamic.localho

  • 我需要在Dockerfile中设置默认时区。我有两个容器(nginx和php7 fpm)。 当我进入PHP容器的bash并运行时,我得到: 默认时区= 日期时区= 我的DockerFile如下所示: nginx/Dockerfile: php fpm/Dockerfile: 我试着使用类似问题的答案,但没有结果。 注意:我正在使用和来运行完整的堆栈,这正是这个堆栈。

  • 我正在用PySide和Python2.7编写一个程序。 这段代码显示一个工作任务栏图标和一个iconmenu。现在,当我点击“Show Window”时,我想在图标的相同位置加载一个停靠到任务栏的Widget/Windows。 如果我会使用几何学,这将永远不会工作,因为有些人的任务栏在顶部,或在屏幕的侧面。 如何用pyside将窗口/小部件停靠到任务栏? 谢谢。