【问题标题】:Running java app in kubernetes container is not working在 kubernetes 容器中运行 java 应用程序不起作用
【发布时间】:2019-01-15 02:41:46
【问题描述】:

我正在尝试在 kubernetes POD 中部署和运行 java 应用程序,但我遇到了以下错误。 但是当我将它作为 docker 容器运行时,它运行良好。

这是 Dockerfile -

FROM openjdk:8-jre-alpine
ENV artifact mysessionmanager-1.0.0-SNAPSHOT.jar
WORKDIR /root/apps
COPY . /root/apps
EXPOSE 8080
ENTRYPOINT ["sh", "-c"]
CMD ["java -jar ${artifact}"]

docker build -t mysessionmanager .
docker tag mysessionmanager xxxx/mysessionmanager:v1
docker push xxxx/mysessionmanager
kubectl run mysessionmanager --image=xxxx/mysessionmanager:v1 --port=8080
kubectl expose deployment --type=NodePort --port=80 --target-port=8080 --name=mysessionmanager  

kubectl get deployments 显示我的部署可用状态为 0

kubectl get pods 显示我的 POD 的状态为 CrashLoopBackOff

kubectl get logs mysessionmanager-5654545f8-mvt5x 什么都不显示

kubectl describe pod mysessionmanager-5654545f8-mvt5x

Reason: CrashLoopBackOff
Last State: Terminated
Reason: ContainerCannotRun
Message: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"java -jar mysessionmanager-1.0.0-SNAPSHOT.jar\": executable file not found in $PATH": unknown

但是当我使用以下命令直接运行 docker 映像时,它可以正常工作。

docker run -it mysessionmanager

感谢任何帮助。谢谢

【问题讨论】:

  • 你的docker push 命令也有...:v1 标签吗?
  • 是的,你是对的!

标签: docker kubernetes dockerfile kubectl


【解决方案1】:

不需要同时使用 cmd 和入口点命令。

在我的项目中,我创建了一个小型 bash 脚本,其中写入了 java 命令。

那个小脚本在我的入口点运行,没有配置任何 cmd。

【讨论】:

  • 还是同样的错误...我删除了 CMD 并将 ENTRYPOINT 修改为 ENTRYPOINT ["java", "-jar", ${artifact}]
  • 将您的 java 命令放入一些简单的 sh 脚本中:ENTRYPOINT ["./docker-entrypoint.sh"] 和入口点中:exec java -jar ....
  • 没有运气仍然是同样的错误.. 在 execscript.sh -> exec java -jar mysessionmanager-1.0.0-SNAPSHOT.jar 中添加了以下内容并将 Dockerfile 修改为 ENTRYPOINT ["./execscript.sh"]
  • @aa 听起来大卫很准,你没有使用你认为你正在使用的图像。
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2018-04-11
  • 1970-01-01
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
相关资源
最近更新 更多