我对这类东西确实很陌生,对 Kubernetes 和 Docker 很陌生,但在 Java 上已经有了一些经验。
我尝试通过将 Docker Hub 连接到 GitHub 来使用它。
在我的 Git-hub 上只有 2 个代码:
- Dockerfile
- 简单的 hello world Java 代码。
每次我在 Kubernetes 上运行它并使用 kubectl get pods 检查它时,我总是得到 CrashLoopBackOff。
我不明白出了什么问题,我已经检查了代码并尝试在 Docker 上运行它,它工作了,它打印出了 hello world。但在 Kubernetes 上不行。
这是 Dockerfile 上的代码
FROM openjdk:8
COPY helloworld.java .
RUN javac helloworld.java
ENTRYPOINT ["java", "helloworld"]
这是简单的 helloworld java 上的代码
public class helloworld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
我的期望是:当我在 Kubernetes 上运行它时,我希望它说它已经准备好了,我可以将它部署到 IP 并显示简单的 hello world。
最佳答案
由于您没有指定如何执行它,我假设您一直在使用 kubectl run
(默认情况下创建部署)或定义部署的 list 。如果是这样,那么CrashLoopBackOff
是预期的,因为 deployments适用于长时间运行的进程。你的Java代码不是长时间运行的。它打印一些东西然后退出,也就是说,那里没有无限循环。
所以要么做 System.out.println
在循环中(中间有 sleep ?)或使用运行命令或用于一次性执行的工作负载类型(例如 jobs )。
顺便说一句,即使进行了部署,您仍然应该能够使用 kubectl logs查看第一次执行的输出。
关于java - Kubernetes 无法通过 Github 从 Docker hub 部署简单镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55559489/