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

Curl Docker Swarm上无法访问已发布的服务,curl,docker,spring-boot,docker-swarm,docker-networking,Curl,Docker,Spring Boot,Docker Swarm,Docker Networking,所以我在docker swarm上创建了一个服务: docker create service --name my-service --network my-network -p 8761:8761 --replicas 1 my-image 这是一个Spring引导应用程序,当查看创建的docker容器的stdout时,如下所示: 2017-01-19 12:44:48.588 INFO 6 --- [ main] s.b.c.e.t.TomcatEmbeddedSer

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

docker create service --name my-service --network my-network -p 8761:8761 --replicas 1 my-image
这是一个Spring引导应用程序,当查看创建的docker容器的stdout时,如下所示:

2017-01-19 12:44:48.588  INFO 6 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8761 (http)
指示应用程序侦听正确的端口。 运行docker service inspect my service时,它还表示已为此服务发布端口8761

当我尝试这个问题时:卷曲http://localhost:8761 在docker swarm master上,目前群中唯一的节点我遇到了超时。卷曲到任何其他端口会导致立即连接被拒绝错误

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

您应该卷曲到管理器的IP,因为它是容器运行的节点

您在问题中提到您正在容器内运行curl命令,但我假设您已经执行了类似eval$docker machine env的操作,它只允许您在管理器中启动容器。使用此选项,您只能选择要使用的活动docker引擎

要在计算机中实际运行命令,您应该使用ssh连接到该计算机,然后可以使用curl连接到localhost:


docker machine ssh-curl localhost:8761

您应该使用管理器的ip,而不是本地主机。@AlexanderGeorge谢谢,工作正常。为什么我不能在从manager机器本身进行卷曲时使用localhost?我写了一个正确的答案。所以卷曲到IP地址是有效的,但我没有在容器中运行卷曲到localhost命令,而是在docker swarm master本身的同一台机器上运行它。