如何为 docker 群中的容器副本分配不同的端口

How to assign different port to container replicas in docker swarm

我们正在使用 docker 容器在 docker swarm 模式下部署带有副本 3 的风暴主管。现在我们想通过浏览器访问主管登录。

我们已经暴露了可以访问 storm UI 的 8080 端口。这工作正常。现在 storm 也在 8000 端口暴露了他们的日志文件。由于我们只有一个 nimbus 和 3 个 supervisor,通过端口 8000 访问 nimbus 日志非常容易。

我们在使用 docker swarm 服务部署的 supervisor 上遇到的问题。在 docker swarm 服务中,我们不能为不同的容器传递不同的端口。

目前docker swarm 服务在所有容器上公开相同的端口。 我们真正想要的是

port    container
8011    supervisor1:8000
8012    supervisor2:8000
8013    supervisor3:8000

我们怎样才能做到这一点。

提前致谢。

理想情况下,Swarm 服务中的任务不应该是唯一的或包含来自彼此的唯一数据。我知道有几种方法可以解决这个问题,但它总是让人感觉 non-ideal 或骇人听闻,尤其是当您处理需要与任务进行一对一匹配的持久数据量时。

我建议您将三个副本分成三个独立的服务。我知道这听起来需要更多工作,但在单个堆栈文件中,它可以让您灵活地处理它们上的各个端口和卷,因为它们是独特的容器。