一尘不染

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

docker

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

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

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


阅读 284

收藏
2020-06-17

共1个答案

一尘不染

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

您有几种选择:

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

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

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

2020-06-17