spring-boot - 在 Docket Desktop 中的 Kubernetes 中运行 Springboot 应用程序时出错
问题描述
我创建了一个简单的 spring boot 应用程序并创建了一个 docker 映像。在本地(windows 10 专业版)机器上测试了 docker 映像,它工作正常。然后我尝试使用 kubectl run 命令运行映像,但它不起作用。
以下是详细信息:环境 - Windows 10 Professional、Docker Desktop、Java 8、在 Spring Tool Suite 中创建的 Spring Boot 应用程序
- 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());
}
}
- Dockerfile 包含以下内容
FROM openjdk:8
ADD target/demowar1.jar demowar1.jar
EXPOSE 8085
ENTRYPOINT ["java" , "-jar" , "demowar1.jar"]
- 使用 docker build 命令创建镜像
docker build -t sudhirj8/demowar1。
- 运行 docker run 命令并验证它是否有效
docker run --name demowar1 -p 8085:8085 sudhirj8/demowar1
在浏览器中,使用 localhost:8085 并查看正确的输出
移除了正在运行的容器
运行以下命令以在 Kubernetes 中运行
kubectl run demowar1 --image sudhirj8/demowar1
Pod 已成功创建但是当我运行 localhost:8085/hello 浏览器时,出现错误
Unable to connect
- 运行命令 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/
推荐阅读
- yii2 - 如何摆脱 Froala 所见即所得编辑器的基于文本的水印(Yii2 小部件)
- docker - 如何将多个文件复制到 Docker 容器内的特定目录/位置
- python - 有什么方法可以将 Kivy 相机照片保存为 base64 而不将其导出为 png?
- c# - 使用 StaticFileOptions() 从 Razor 类库中中断嵌入的静态文件
- arrays - 将日期时间表分成数组(Matlab)
- java - 使用 Java 和 spark 在 Snowflake 中激活仓库
- java - 如何使用谷歌地图 java 客户端库获取距离
- c# - 获取对象值字典数组的对象的值“字典
" - java - LinkedHashMap的性能:大O、内存开销等
- android-listview - 如何自定义使用 sqliteopenhelper 的列表视图?