【问题标题】:docker deploy won't publish port in swarmdocker deploy 不会在 swarm 中发布端口
【发布时间】:2016-11-03 15:34:37
【问题描述】:

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

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 中获取它。

-- 马库斯

【问题讨论】:

    标签: docker docker-compose dockerfile docker-swarm docker-engine


    【解决方案1】:

    docker service ls 将显示端口映射。

    【讨论】:

      【解决方案2】:

      据我目前了解,您可以在创建之后发布更新服务的端口,如下所示:

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

      【讨论】:

        【解决方案3】:

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

        您应该会看到来自docker service inspect my-service 的端口。

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

        【讨论】:

        • 如果我不希望我的服务将端口公开为“已发布端口”(在 swarm 外部公开)但我确实想在内部(在 swarm 内部)公开它以使该服务成为被群中的其他服务使用。
        • 那你什么都不用做。这是默认行为,只要服务都在默认网络上,或者它们都加入同一个网络。
        • 我现在如何连接到单个容器?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-02
        • 2019-06-22
        • 2016-02-21
        • 2021-11-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多