在 Docker Swarm 上无法访问已发布的服务

Published Service not reachable on Docker Swarm

所以我在 docker 集群上创建了一个服务:

docker create service --name my-service --network my-network -p 8761:8761 --replicas 1 my-image

这是一个 Spring 引导应用程序,当查看创建的 docker 容器的标准输出时,显示以下行:

2017-01-19 12:44:48.588  INFO 6 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8761 (http)

表示应用程序侦听正确的端口。 当 运行ning docker service inspect my-service 时,它还表示端口 8761 已为此服务发布。

然后我尝试发出:curl http://localhost:8761(在 docker swarm master 上,目前是 swarm 中唯一的节点)我 运行 超时。卷曲到任何其他端口会立即导致 Connection Refused 错误。

Spring Boot 应用程序在机器上直接启动时工作正常,日志中没有任何提示,我真的不知道下一步该去哪里...有人知道吗?

您应该 curl 管理器的 IP,因为它是您的容器所在的节点 运行ning。

你在你的问题中提到你在容器内 运行ning curl 命令,但我假设你已经做了类似 eval $("docker-machine env <manager>") 的事情,这只会允许你在管理器中启动容器。有了这个,您只能 select 要使用的活动 docker 引擎。

实际上 运行 机器中的命令你应该 ssh 进入它,然后你可以 curl 到本地主机:

docker-machine ssh <manager> -- curl localhost:8761