在 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
所以我在 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