docker部署不会在swarm中发布端口

问题描述 投票:0回答:3

我设置了一个包含两个节点的集群,一个管理器和一个工作器。我希望在群中发布一个端口,以便我可以访问我的应用程序,我想知道如何实现这一点。

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 本身支持,但是我似乎无法使用新的群模式将其单独应用到我的服务中。

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

底部有一个很好的描述,描述了网络的外观:

Internet -> HAProxy -> Service_A -> Container A

但是,我找不到通过 docker service create 命令链接服务的方法,现在看起来最好是一种设置网络的方法,当我在服务上应用此网络时,它会在 HAProxy 中获取它。

--马库斯

docker docker-compose dockerfile docker-swarm docker-engine
3个回答
17
投票

据我目前的理解,您只需在创建后发布更新服务的端口,如下所示:

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

10
投票

Swarm 模式以不同的方式发布端口。它不会出现在

docker ps
中,因为它没有在主机上发布端口,而是将端口发布到所有节点,以便可以在服务副本之间进行负载均衡。

您应该可以看到来自

docker service inspect my-service
的端口。

任何其他服务应该能够连接到

my-service:80


1
投票

docker service ls
将显示端口映射。

© www.soinside.com 2019 - 2024. All rights reserved.