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

时间:2017-01-19 13:17:13

标签: 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 Boot应用程序,当查看创建的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。

当我尝试发出问题:curl http://localhost:8761(在docker swarm master上,现在是swarm中唯一的节点)我遇到了超时问题。卷曲到任何其他端口会立即导致Connection Refused错误。

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

1 个答案:

答案 0 :(得分:2)

您应该curl到经理的IP ,因为它是您的容器正在运行的节点。

您在问题中提到您在容器内运行curl命令,但我假设您已完成eval $("docker-machine env <manager>")之类的操作,这只会让您在管理器中启动容器。有了这个,您只需选择要使用的活动docker引擎。

要在机器中实际运行一个命令,你应该 ssh到它,然后你可以curl到localhost:

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