在Docket Desktop中的Kubernetes中运行Springboot应用程序时出错



我创建了一个简单的spring-boot应用程序并创建了docker映像。在本地(windows10专业版(机器上测试docker图像,它工作正常。然后我尝试使用kubectl run命令运行映像,但它不起作用。

以下是详细信息:环境-Windows 10 Professional,Docker Desktop,Java 8,在Spring Tool Suite 中创建了Spring Boot应用程序

  1. Spring Boot项目application.properties有以下条目
server.port=8085

控制器包含以下

@RestController
public class TomcatController {
@GetMapping("/hello")
public Collection<String> sayHello() {
return IntStream.range(0, 10)
.mapToObj(i -> "Hello number " + i)
.collect(Collectors.toList());
}
}
  1. Dockerfile包含以下内容
FROM openjdk:8
ADD target/demowar1.jar demowar1.jar
EXPOSE 8085
ENTRYPOINT ["java" , "-jar" , "demowar1.jar"]
  1. 使用docker build命令创建图像

docker build-t sudhirj8/demowar1。

  1. 运行docker run命令并验证它是否有效

docker run--name demowar1-p 8085:8085 sudhirj8/demowar1

  1. 在浏览器中,使用localhost:8085并查看正确的输出

  2. 移除正在运行的容器

  3. 运行以下命令在Kubernetes 中运行

kubectl run demowar1 --image sudhirj8/demowar1

Pod创建成功但是当我运行localhost:8085/hello浏览器时,我得到错误

Unable to connect
  1. 运行命令kubectl记录demowar1并查看tomcat是否在8085端口上正确启动
/\ / ___'_ __ _ _(_)_ __  __ _    
( ( )___ | '_ | '_| | '_ / _` |    
\/  ___)| |_)| | | | | || (_| |  ) ) ) )
'  |____| .__|_| |_|_| |___, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::                (v2.5.1)
2021-06-11 23:52:15.037  INFO 1 --- [           main] com.example.demo.Demowar1Application     : Starting Demowar1Application v0.0.1-SNAPSHOT using Java 1.8.0_292 on demowar1-pod with PID 1 (/demowar1.jar started by root in /)
2021-06-11 23:52:15.039  INFO 1 --- [           main] com.example.demo.Demowar1Application     : No active profile set, falling back to default profiles: default
2021-06-11 23:52:15.937  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8085 (http)
2021-06-11 23:52:15.948  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-06-11 23:52:15.948  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.46]
2021-06-11 23:52:15.999  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-06-11 23:52:15.999  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 915 ms
2021-06-11 23:52:16.491  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8085 (http) with context path ''
2021-06-11 23:52:16.499  INFO 1 --- [           main] com.example.demo.Demowar1Application     : Started Demowar1Application in 1.83 seconds (JVM running for 2.22)

在机器暴露之前,无法访问此处的Pod。您可以通过创建一个服务来实现这一点,该服务将您的请求引导到pod。

https://kubernetes.io/docs/concepts/services-networking/service/

或者,如果你只想在不暴露应用程序的情况下进行测试,你可以从你的机器向pod进行端口转发,比如下面的

kubectl port-forward pods/demowar1 8085:8085

然后在您的机器上执行localhost:8085

相同的文档->https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/

相关内容