【问题标题】:Published Service not reachable on Docker Swarm在 Docker Swarm 上无法访问已发布的服务
【发布时间】:2017-06-04 05:01:34
【问题描述】:

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

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

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

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 应用运行良好,日志中没有任何提示,我真的不知道下一步该往哪里看……这里有人知道吗?

【问题讨论】:

  • 你应该curl到经理的ip,而不是localhost。
  • @AlexanderGeorge 谢谢,工作。为什么我从管理器机器本身卷曲时不能使用 localhost?
  • 我写了一个正确的答案。

标签: curl docker spring-boot docker-swarm docker-networking


【解决方案1】:

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

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

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

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

【讨论】:

  • 所以curl 到 IP 地址有效,但我没有在容器中运行 curl to localhost 命令,我在 docker swarm master 本身上运行它,同一台机器.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多