【问题标题】:Not able to access springboot application running inside a container on MacOs无法访问在 MacO 上的容器内运行的 Spring Boot 应用程序
【发布时间】:2020-04-12 00:53:47
【问题描述】:

我在 macOS Catalina 的容器内运行了一个 springboot 应用程序。日志显示应用程序已启动并在容器内运行,但我无法从浏览器访问它。 我尝试过使用:

localhost:8081/ 
0.0.0.0:8081/    and 
127.0.0.1/8081/

但没有任何帮助。我还在我的 application.properties 文件中添加了server.address=0.0.0.0,但这也没有帮助。

这就是我运行容器的方式:

docker run --name spring_boot_docker -it --link mysql-dev-server:db -p 8081:8081 demo_docker_kubernetes

日志显示应用程序运行良好:

 2020-04-12 00:21:40.149  INFO 1 --- [           main] 
o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 
'applicationTaskExecutor'
2020-04-12 00:21:40.632  INFO 1 --- [           main] 
o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with 
context path ''
2020-04-12 00:21:40.637  INFO 1 --- [           main] com.microservice.DemoApplication         
: Started DemoApplication in 8.519 seconds (JVM running for 9.391)
2020-04-12 00:21:52.209  INFO 1 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       
: Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-04-12 00:21:52.210  INFO 1 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        
: Initializing Servlet 'dispatcherServlet'
2020-04-12 00:21:52.227  INFO 1 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        
: Completed initialization in 17 ms

当我执行docker container ls 时,我在“端口”下得到以下输出: 0.0.0.0:8081->8081/tcp 是否有帮助?

我参考了几乎所有其他建议在 application.properties 中包含 server.address=0.0.0.0 的帖子,但正如我所提到的,这对我没有帮助。

知道我在这里做错了什么吗?谢谢

【问题讨论】:

  • 你能从容器或任何 docker 容器 ping google.com 吗?
  • @Richard - 是的,我可以ping通。
  • 8081 是否暴露在您的 dockerfile 中?喜欢EXPOSE 8081
  • @SMaZ - 是的,它已经暴露了。
  • 使用本地主机 IP 发布容器 IP ----> docker run --name spring_boot_docker -it --link mysql-dev-server:db -p 127.0.0.1:8081:8081/tcp

标签: spring-boot docker


【解决方案1】:

如果您运行应用程序的生产模式,则默认情况下它使用 HTTPS,您可能使用 localhost(HTTP) 访问主机。

【讨论】:

  • 您好,抱歉,您所说的生产模式是什么意思?我注意到一件事,该应用程序至少是使用 HTTPS 命中的。我在日志中收到“解析 HTTP 请求标头时出错”。
  • 我在 MacOS 的 Docker 容器中遇到了同样的问题。您可以通过 HTTPS 访问应用程序,因为它处于生产模式(意味着应用程序正常启动)。但是当我尝试将 K8 的编排与容器 pod 一起使用时,我没有遇到任何问题。要求您也查看此链接。 [链接]medium.com/@balint_sera/…
【解决方案2】:

您需要删除 docker run 中的 --link 才能访问它。

--link 是一个已弃用的 Docker 功能,因此可能在这两个容器之间创建了一个 docker 网络。使您的 -p 8081:8081 无用。

【讨论】:

  • 我已经删除了 --link,现在我在我创建的同一个网络中运行这两个容器。但我仍然无法访问该应用程序。我通过检查确认这两个容器都在网络上。
猜你喜欢
  • 2020-08-10
  • 2019-02-21
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 2019-08-01
  • 2017-04-19
  • 1970-01-01
相关资源
最近更新 更多