【问题标题】:How to recreate containers with Docker Compose on a Swarm Cluster of multiple nodes?如何在多个节点的 Swarm 集群上使用 Docker Compose 重新创建容器?
【发布时间】:2016-04-08 09:48:03
【问题描述】:

当我的 Swarm 集群中只有 1 个节点并且尝试在该节点上重新创建我的 Web 应用程序容器时(我想部署我的 Node.JS Web 应用程序的新版本,它是监听 80 端口)

问题是 Swarm 首先停止旧容器,但不删除它,然后尝试创建新容器,因为 Swarm 也会跟踪停止容器的端口限制,它认为我节点上的 80 端口仍在使用中(由停止的容器使用):

Recreating 41910b0283eb_41910b0283eb_41910b0283eb_vagrant_web_1
ERROR: unable to find a node with port 80 available

这个问题可能有两种解决方案:

  1. 在每次部署之前,我可以执行 docker-compose stopdocker-compose rm 来停止并删除每个正在运行的容器 - 这也会为 Swarm 释放端口 80。
  2. 另一种解决方案是拥有多个节点并放松。当 compose 重新创建你的容器时,Swarm 会自动找到一个没有人使用 80 端口的随机节点,并在另一个节点上启动新容器。

我可以使用解决方案 1。但我想知道当我有多个节点时如何使其工作。

我对 2. 方法的问题是,通常 Web 应用程序需要有一个可用于域注册的修复 IP。如果 Swarm 将我的 Web 应用程序部署到随机选择的节点,那么我该如何解决这个问题?

我可以使用Round-robin DNS,但我不确定它是否会有所帮助,因为在这种情况下,如果我的集群中有 3 个节点,我需要在每个节点上都有一个我的 Web 应用程序实例。但如果是这种情况,那么我不会遇到同样的问题吗? Swarm 会认为有人仍在使用端口 80,因此它不会找到任何具有端口 80 的节点。

如何解决这个问题?

【问题讨论】:

    标签: node.js docker dns containers docker-compose


    【解决方案1】:

    我认为大多数时候在应用程序前面都有一个负载均衡器。 DNS 入口点位于负载均衡器上,您可以让它在容器停止和启动时自行重新配置。

    docker events 有几个项目可以为您处理这些问题。以下是我所知道的几个:

    【讨论】:

      猜你喜欢
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多