当前位置: 首页 > 面试题库 >

具有初始数据的docker postgres不会在提交中持久存在

阎佑运
2023-03-14
问题内容

我在docker环境中创建了一个Rails应用程序,它链接到postgres实例。我编辑了postgres容器以添加初始数据(通过从rails应用程序运行rake
db:setup)。现在,我提交了postgres数据库,但是当我创建一个新容器(已提交的postgres图像)时,似乎无法记住我的数据。

是否有可能将数据保存在提交中,然后在以后重用?

我使用了postgres图片:https://registry.hub.docker.com/_/postgres/


问题答案:

问题是postgres Dockerfile将“ / var / lib / postgresql /
data”声明为卷。这只是一个普通目录,它位于映像使用的联合文件系统之外。在没有容器链接到它们之前,这些卷一直存在,直到它们被明确删除。

您有几种选择:

  • 使用--volumes-from命令与新容器共享数据。仅一次仅运行一个postgres映像时,这才有效,但这是最佳解决方案
  • 在声明该卷之前,编写您自己的Dockerfile来创建数据。创建容器后,该数据将被复制到卷中。
  • 编写一个在运行时填充数据库的入口点或cmd脚本。

所有这些建议都要求您在容器运行后使用卷来管理数据。另外,您可以编写自己的Dockerfile,而不必声明一个卷。docker commit添加数据后,您可以用来创建新图像。这可能会在短期内起作用,但是绝对不是您应该如何使用容器的方法-它是不可重复的,最终您将用完Union
File System中的各个层。

查看有关管理容器中数据的官方Docker文档,以了解更多信息。



 类似资料:
  • 我想写一个脚本,它将2 GB的数据从硬盘加载到内存中,然后当其他程序请求时,它必须得到一个输入,并根据输入对这个数据进行一些计算。对我来说,重要的是将这2 GB的数据持久地保存在内存中,以加快计算速度,更重要的是避免巨大的I/O负载。 我应该如何将数据永远保存在内存中?或者更一般地说,我应该如何在Python中解决这样的问题?

  • 创建一个register.html表单,提示用户输入姓名、电子邮件和密码,然后单击提交,触发一个PHP脚本来检查电子邮件输入是否已经在使用,如果还没有使用,它会放置在mysql上的表users-form中的适当字段中的用户数据。 我的问题是AJAX没有提交表单。javascript指出“填写空字段”工作罚款。我不知道我做错了什么。 超文本标记语言: ajaxconnect。php: 有什么想法吗?

  • 我正在使用网络逻辑10.3。我正在尝试配置一个持久订阅,其中包含由 jdbc 存储(在 Oracle DB 中)支持的持久消息。我有一个主题,MDB 正在作为持久订阅者侦听该主题。在场景-1下:如果我发送消息,它会命中MDB。 在场景2中:我挂起了MDB,希望发送到主题的消息只要不被MDB(它是唯一注册的持久订阅者)使用,就会一直存在。但是当我向主题发送消息时,它短暂地出现在那里,然后就消失了(我

  • 当你首次建立一个应用的时候,为你的数据库预先安装一些硬编码的数据,是很有用处的。 有几种方法可以让Django自动创建这些数据:你可以通过fixtures提供初始数据,或者提供一个包含初始数据的sql文件。 通常来讲,使用fixtrue更加简洁,因为它是数据库无关的,而使用sql初始化更加灵活。 提供初始数据的fixtures fixture是数据的集合,让Django了解如何导入到数据库中。创建

  • 现代程序离不开数据存储,现阶段很热的所谓大数据处理、云盘等,更是以存储为依托。有数据存储,自然需要进行数据交换,已达到数据共享等目的。 关系型数据库发展了很长一段时间,SQL/SQL-like 已经很成熟,使用也很广泛,Go 语言标准库提供了对 SQL/SQL-like 数据库的操作的标准接口,即 database/sql 包。 在数据交换方面,有很多成熟的协议可以使用,常用的有:JSON、XML

  • 问题内容: 我们有一个带有JSON字段的模型,其中插入了用户标志。插入确实可以按预期工作,但是删除某些标志时,它们保留在字段中,并且更改不会持久保存到数据库中。 我们的模型中有以下方法: databasse是postgres,我们对字段类型使用SQLalchemy JSON字段方言。有什么建议吗? 问题答案: 如果您使用的是Postgres <9.4,则无法直接更新JSON字段。您需要 flag_