我在 Docker 环境中创建了一个 Rails 应用程序,它链接到一个 postgres 实例。我编辑了
postgres 容器添加初始数据(通过从 Rails 应用程序运行 rake db:setup)。现在我提交了 postgres 数据库,但当我创建一个新容器(提交的 postgres 映像)时,它似乎不记得我的数据。
是否可以在提交中保存数据,然后再使用它?
我使用了 postgres 图像:https://registry.hub.docker.com/_/postgres/
问题是 postgres Dockerfile 将“/var/lib/postgresql/data”声明为卷。这只是一个普通目录,位于图像使用的联合文件系统之外。卷会一直存在,直到没有容器链接到它们并且它们被显式删除为止。
你有几个选择:
- Use the
--volumes-from
与新容器共享数据的命令。仅当一次只有一个正在运行的 postgres 映像时,这才有效,但它是最好的解决方案。
- 编写您自己的 Dockerfile,在声明卷之前创建数据。创建容器时,该数据将被复制到卷中。
- 编写一个入口点或 cmd 脚本,在运行时填充数据库。
所有这些建议都要求您在容器运行后使用卷来管理数据。或者,您可以编写自己的 Dockerfile,但不声明卷。然后你可以使用docker commit
添加数据后创建新图像。这可能会在短期内起作用,但绝对不是您应该如何使用容器 - 它是不可重复的,您最终将用完联合文件系统中的层。
查看 Docker 官方文档管理容器中的数据了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)