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

Amazon web services 无法访问AWS中docker swarm中部署的REST服务,amazon-web-services,swagger-ui,docker-swarm,tibco-business-works,Amazon Web Services,Swagger Ui,Docker Swarm,Tibco Business Works,我使用由提供的云形成模板来建立docker swarm 我使用Tibco BusinessWorks Container Edition创建了一个REST服务,并通过创建docker服务将其部署到swarm中。 docker服务创建——名称aka swarm demo——发布8087:8085 akamatibco/docker\u swarm\u demo:part1 服务成功启动,但CloudWatch日志显示以下异常: 我已经尝试在Dockerfile中传递JVM环境变量: ENV JA

我使用由提供的云形成模板来建立docker swarm

我使用Tibco BusinessWorks Container Edition创建了一个REST服务,并通过创建docker服务将其部署到swarm中。
docker服务创建——名称aka swarm demo——发布8087:8085 akamatibco/docker\u swarm\u demo:part1

服务成功启动,但CloudWatch日志显示以下异常:

我已经尝试在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-xget--AWS负载平衡器端口的标题'Accept:application/json''URL,我在创建服务/资源URI时公开了该URL'

但我得到的信息如下:

当我运行docker时,REST服务工作正常。
我已经检查了manager和负载平衡器的安全组。负载平衡器对所有流量开放入站,对于manager,我打开了HTTP连接

我不知道我是否错过了什么。有人能帮忙吗?

如中所述,如果您一起阅读,您会发现以下内容:

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

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

服务的发布端口的工作方式与常规容器不同。问题是,;运行service create--publish后,映像不会暴露端口,因此swarm路由层无法到达REST服务。要解决此问题,请使用mode=host

因此,我使用下面的命令创建了一个服务:
docker服务创建--name周二--publish mode=host,target=8085,published=8087 akamatibco/docker\u swarm\u演示:第1部分

这最终消除了例外

还要确保配置负载平衡器的防火墙设置,以便允许通过所需协议进行通信,以便访问部署在容器内的应用程序。
在我的例子中,它是HTTP协议,在负载平衡器上启用端口8087,达到了这个目的