我的问题旨在验证并可能纠正我对码头集装箱可靠性的看法。我同时阅读了Docker文档和Dockerfile中关于VOLUME
的几篇文章,以及在运行容器时作为参数的--v
作为将数据持久化到Docker容器之外的方法。无论是在数据容器中还是在主机系统上。由于希望保持设置的复杂性,我不希望到处复制/保存/存储数据,而是将其保存在Docker容器本身中。
通过几个案例,我发现了码头集装箱的行为。我想知道我是否错过了这样一种情况,即容器可能非故意地100%丢失,即不执行$ docker rm -f mycontainer
$ docker restart mycontainer
或$ docker run mycontainer
暂停、停止和杀死可重新启动的容器的docker命令在所有这些情况下,码头集装箱最终仍然存在。那么,还有其他情况会导致码头容器丢失,就像使用$ docker rm -f mycontainer
那样吗?
背景是,我在Postgres的主机系统上阅读了大量关于挂载卷和外部数据存储的内容,但如果可能的话,我希望避免将数据存储在主机系统的容器之外。另一方面,我不想醒来,失去所有的数据。(我确实执行常规的SQL-转储,但我不想每5分钟执行一次)。如果码头容器本身对于持久性数据不可靠,我不明白为什么我应该创建第二个容器来保存第一个容器的数据,并通过添加一个新容器来增加系统的复杂性,但在可靠性方面没有获得任何信息。
编辑:在Docker 卷用户指南中有两点没有明确解释预期的行为,因此让我怀疑这些概念是否提供了额外的可靠性:
发布于 2015-02-05 08:11:49
如果您将所有数据存储在容器中,那么当您需要更新映像时,您将做什么?对图像的更新通常通过更改Dockerfile和重建映像来完成。如果将数据单独保存到容器中,则可以启动映像的新版本,使用--volumes-from
或-v
挂载数据,并关闭旧容器。在您的情况下,您必须保持容器的运行,并试图修补一些类似木偶的东西。
而且,我不知道你认为你在存什么。如果运行官方postgres映像,它将在Dockerfile中声明卷。无论是否使用-v
运行容器,这些卷都以正常目录的形式存在于主机系统中。即使您的Dockerfile没有卷,显然UFS仍然存储在您的主机上。
通常,您应该认为容器是临时的和无状态的。虽然您不必这样做,但您会发现大多数工具和支持服务都是围绕这个成语设计的。
关于您的场景,您缺少了几个:
为了明确命令,docker start
将重新启动已停止或退出的容器,而docker unpause
将取消暂停暂停的容器。
https://stackoverflow.com/questions/28345352
复制相似问题