gpt4 book ai didi

amazon-web-services - 无法访问部署在 AWS docker swarm 中的 REST 服务

转载 作者:行者123 更新时间:2023-12-01 13:29:43 24 4
gpt4 key购买 nike

我使用了Docker for AWS setup & prerequisites提供的云形成模板设置一个 docker swarm。

我使用 Tibco BusinessWorks Container Edition 创建了一个 REST 服务,并通过创建一个 docker 服务将其部署到集群中。
docker service create --name aka-swarm-demo --publish 8087:8085 akamatibco/docker_swarm_demo:part1
服务启动成功,但 CloudWatch 日志显示以下异常:

enter image description here

我尝试将 Dockerfile 中的 JVM 环境变量传递为:
ENV JAVA_OPTS= "-Dbw.rest.docApi.port=7778"
但这没有帮助。

有趣的是日志最后说:
com.tibco.thor.frwk.Application - TIBCO-THOR-FRWK-300006:已启动 BW 应用程序 [SFDemo:1.0]
所以我尝试使用 CURL 访问应用程序 -
curl -X GET --header 'Accept: application/json' 'AWS 负载均衡器的 URL:我在创建服务/资源 URI 时公开的端口'
但我收到以下消息:

enter image description here

当我执行 docker run 时,REST 服务工作正常。
我检查了管理器和负载均衡器的安全组。负载均衡器已对所有流量开放入站,并且我为管理器打开了 HTTP 连接。

我不知道是否遗漏了什么。任何人都可以帮忙吗?

最佳答案

Deploy services to swarm 中所述,如果您继续阅读,您会发现以下内容:

直接在 SWARM 节点上发布服务的端口
如果您需要根据应用程序状态做出路由决策,或者您需要完全控制将请求路由到服务任务的过程,那么使用路由网格可能不是您应用程序的正确选择。要直接在服务运行的节点上发布服务的端口,请使用 --publish 标志的 mode=host 选项。

注意:如果您使用 mode=host 并设置 published= 直接在 swarm 节点上发布服务的端口,这会产生一个隐式限制,即您只能在给定的 swarm 节点上为该服务运行一个任务。此外,如果您使用 mode=host 并且不在 docker service create 上使用 --mode=global 标志,将很难知道哪些节点正在运行该服务以便将工作路由给它们。

服务的发布端口与常规容器的工作方式不同。问题是;图像在运行 service create --publish 后没有公开端口,因此 swarm 路由层无法访问 REST 服务。要解决这个问题,请使用 mode = host。

所以我使用下面的命令创建了一个服务:
docker service create --name tuesday --publish mode=host,target=8085,published=8087 akamatibco/docker_swarm_demo:part1

最终删除了异常。

还要确保配置负载均衡器的防火墙设置,以允许通过所需协议(protocol)进行通信,以便访问部署在容器内的应用程序。
就我而言,它是 HTTP 协议(protocol),在达到目的的负载均衡器上启用端口 8087。

关于amazon-web-services - 无法访问部署在 AWS docker swarm 中的 REST 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46564316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com