【问题标题】:How to keep container state in docker swarm如何在 docker swarm 中保持容器状态
【发布时间】:2018-02-21 08:19:07
【问题描述】:

这个问题有点概念化……

我启动一个服务,

Docker 在节点上为此服务运行容器,

我在这个容器上取得进展,

当某些点容器发生异常时,进入不可恢复状态...

此时,我无法手动管理一个或多个容器(要恢复它,例如停止 - 启动),因为 Swarm 是容器的管理器。

保持容器状态的最佳做法是什么?例如,有“docker container commit”,我是否应该找到在哪些节点上启动容器,找到它们的容器 id 并手动提交它们?我是否应该为此目的定义 cron 作业。否则,我不应该依赖 Docker 来开发此类应用程序吗?

提前致谢。

【问题讨论】:

  • 你指的是什么样的状态?如果容器中的进程由于某种原因失败,那可能意味着它进入了错误状态,因此不清楚为什么要“保留”它。
  • @OliverCharlesworth 那么这是否意味着我应该在等待进入不良状态之前提交它?
  • 你是什么状态?如果你的意思是像持久存储,你应该使用 Docker 卷,并假设容器本身是短暂的。
  • 我正在尝试使用 gitlab、eclipse che 和其他一些应用程序/工具等应用程序的 docker 映像建立一个开发堆栈。当我创建新用户、工作区、项目等时,它们都会在我进行过程中触及不同文件夹中的不同文件,而这些我还没有探索过。我希望在 Docker Swarm 创建新容器时保留它们。
  • 老实说,听起来卷是这里的方法 - 将持久性与运行时分开。

标签: docker containers dockerfile docker-swarm


【解决方案1】:

就像 Oliver 建议的那样,您拥有的任何持久性数据都应该存储在 docker 卷中,可能使用 docker volume driver from the Store like REX-Ray

您应该在设置中设定三个总体目标:

  1. 容器本身是短暂的。当 Swarm 崩溃且没有任何损失时,它可以被 Swarm 销毁并重新创建。
  2. 在容器运行时唯一修改的任何文件都存储在 docker 卷中,因此当 Swarm 重新创建新容器时,它们可以正确附加到新容器。如果它是多节点 Swarm,您将需要共享存储以及 REX-Ray 或 Cloudstor 驱动程序之类的东西,以便将卷重新连接到失败后重新创建容器的任何位置。
  3. 您的 Swarm 服务需要healthchecks。这就是 Swarm 将如何知道它们是否处于不良状态并需要被杀死并更换为新容器。

当您结合这三个原则时,它将让 Swarm 解决您的状态和正常运行时间问题。

【讨论】:

    猜你喜欢
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    相关资源
    最近更新 更多