You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes部署Spring Boot+Postgres应用访问超时,如何查看日志?

问题分析与解决方案

从你提供的kubectl describe pod输出里,我一眼就揪出了核心问题——你的容器启动命令被改成了tail -f /dev/null,这会让容器一直“假装存活”,但根本没启动Spring Boot应用,这就是所有访问超时的根源!

核心问题定位

看这段容器配置:

Command:
  /bin/bash
  -ce
  tail -f /dev/null

正常情况下,Spring Boot镜像会默认启动应用主类,而这个自定义命令直接让容器挂在tail命令上,完全跳过了应用启动流程。所以哪怕Pod显示“运行中”,里面的服务其实是死的,不管用LoadBalancer还是NodePort都找不到可访问的服务。

分步解决

1. 删掉错误的容器启动命令

找到你的Deployment配置文件(或者用kubectl edit deployment spring-boot-postgres-sample在线编辑),删掉containers下的command字段。比如原来的配置可能是这样:

containers:
- name: spring-boot-postgres-sample
  image: djtijare/a2i-web:v1
  command: ["/bin/bash", "-ce", "tail -f /dev/null"]

把command这几行彻底删掉,让镜像用默认逻辑启动Spring Boot应用。

2. 重新部署并验证应用启动

修改完Deployment后,执行命令更新部署:

kubectl apply -f your-deployment.yaml

等新Pod创建完成后,查看容器日志确认应用正常启动:

kubectl logs <your-pod-name>

如果日志里出现类似Started Application in X seconds的Spring Boot启动日志,说明服务终于跑起来了。

3. 修正NodePort的端口配置

你的NodePort Service还有个小坑:

ports:
- nodePort: 30500
  port: 80
  protocol: TCP
  targetPort: 80

Spring Boot默认监听8080端口,你这里把targetPort设成了80,等于把流量转发到了容器的空端口,肯定超时!把targetPort改成8080即可。

4. 重新测试访问

等应用启动、Service配置修正后,再测试:

  • 对于LoadBalancer:如果集群支持自动分配ExternalIP,等待状态就绪后访问;如果手动指定了IP,确认集群网络能打通这个IP到Pod的8080端口
  • 对于NodePort:访问http://<你的节点IP>:30500,应该就能正常响应了

额外排查点(如果还是有问题)

  • 检查数据库连接:确认ConfigMap里的POSTGRES_USER、POSTGRES_PASSWORD、POSTGRES_HOST是否正确,Postgres服务是否正常运行
  • 集群内连通性:在集群其他Pod里用curl 192.168.1.28:8080测试Spring Boot Pod的IP和端口,看是否能拿到响应

内容的提问来源于stack exchange,提问作者Dhanraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:53:55