Kubernetes无法通过Github从Docker Hub部署简单映像

时间:2019-04-07 13:25:24

标签: java docker kubernetes

我对这种东西真的很陌生,在Kubernetes和Docker上还是很新,但是已经对Java有一定的经验。

我尝试通过将Docker Hub连接到GitHub来使用它。

在我的Git集线器上,只有2个代码:

  1. Dockerfile
  2. 简单的hello世界Java代码。

每次我在Kubernetes上运行它并使用kubectl get pod对其进行检查时,我总是会得到CrashLoopBackOff。

我不明白这是什么问题,我已经检查了代码并尝试在Docker上运行,它可以工作,并且可以打印出您好世界。但不是在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并显示简单的问候世界。

3 个答案:

答案 0 :(得分:2)

由于您未指定执行方式,因此我假设您一直在使用kubectl run(默认情况下会创建部署)或定义部署的清单。如果是这样,则应该使用CrashLoopBackOff,因为deployments是用于长时间运行的进程。您的Java代码运行时间不长。它先打印一些内容然后退出,也就是说,那里没有无限循环。

因此,System.out.println是循环运行(之间有睡眠吗?),还是使用用于一次性执行的运行命令或工作负载类型(例如jobs)。

顺便说一句,即使进行了部署,您仍然应该能够使用kubectl logs查看第一次执行的输出。

答案 1 :(得分:2)

也假设一些事情。假设映像运行良好,并且唯一的问题是没有进程在运行时docker容器被关闭,那么您要做的就是强制某个进程运行一段时间。

因此,您可以这样做:

kubectl run hello-world --image YOUR-IMAGE sleep 100

这将创建一个deployment的hello-world。吊舱hello-world-xxxxxx-xxxx将运行100秒钟,然后死亡,然后再创建一个新容器100秒钟,依此类推。

获得确认后,您将执行以下操作:

kubectl get po

复制广告连播的名称,并获取日志:

kubectl logs YOUR-POD-NAME

您应该会看到世界。

答案 2 :(得分:0)

您需要提供复制,运行和入口点命令的位置。 在文件名前面加上路径,例如

复制helloworld.java /helloworld.java 运行javac /helloworld.java ENTRYPOINT [“ java”,“ / helloworld]