Docker部署在Swarm中无法发布端口

15

我已经设置了一个带有两个节点(一个管理节点和一个工作节点)的集群。我想发布一个端口以便可以访问我的应用程序,我想知道如何实现这一点。

version: '2'
services:
  server:
    build: .
    image: my-hub.company.com/application/server:latest
    ports:
      - "80:80"

当我运行docker-compose up时,它会公开端口80,并且可以正常工作,但是当我运行一个捆绑部署时

docker deploy my-service

这不会发布端口,所以在docker ps中只会显示80/tcp,而不是指向一个端口。也许这是因为我需要连接负载均衡器或运行一些高级命令或者添加另一层配置来在多主机集群中实际暴露此端口。

有人能帮我理解如何配置/做才能将其暴露出来吗?

最理想的情况是80端口被暴露,并且如果我从不同的主机名访问它,它将发送我到不同的应用程序。

更新: 似乎在部署应用程序后运行以下命令可以使其工作

docker service update -p 80:80 my-service_server
docker kill <my-service_server id>

我发现了这个用于运行HA代理的存储库,它似乎非常好,并且得到了Docker的支持,但是我似乎无法在新的swarm模式下将其与我的服务分开应用。

https://github.com/docker/dockercloud-haproxy

底部有一个描述网络应该如何看起来的不错的说明:

Internet -> HAProxy -> Service_A -> Container A

然而,我无法找到通过docker service create命令链接服务的方法,目前最理想的方法似乎是设置一个网络,并在服务上应用此网络,然后HAProxy将会识别它。

-- Marcus

3个回答

17

就我目前的理解,您可以在创建服务后稍后更新并发布端口,例如:

docker service update my-service --publish-add 80:80

10

Swarm mode以一种不同的方式发布端口。它不会出现在docker ps中,因为它没有在主机上发布端口,而是将端口发布到所有节点,这样可以在服务副本之间进行负载平衡。

您应该从docker service inspect my-service中看到端口。

任何其他服务都应该能够连接到my-service:80


如果我不想将我的服务作为“发布端口”(在Swarm外公开)暴露出去,但我确实希望在Swarm内部公开它,以便其他服务可以使用该服务,那该怎么办? - cSn
那么你就不需要做任何事情。只要服务都在默认网络上,或者它们都加入同一个网络,这就是默认行为。 - dnephin
现在我该如何连接到单个容器? - SHM

2
"

docker service ls 将显示端口映射。

"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接