openshift pod失败并经常重启

时间:2016-03-02 10:23:25

标签: kubernetes dockerfile openshift-origin openshift-enterprise

我正在使用Docker镜像在Origin 3.1中创建一个应用程序。

每当我创建图像时,都会创建新的pod,但会一次又一次地重新启动,最后将状态设置为" CrashLoopBackOff"。

我分析了pod的日志,但它没有出错,所有日志数据都是成功运行的应用程序的预期。因此,无法确定原因。

我今天在下面看到了链接,其中说"在root中运行应用程序仍然存在风险,OpenShift不允许你默认执行此操作,而是以任意方式运行用户ID。"

What is CrashLoopBackOff status for openshift pods?

这里我的图片仅使用root用户,如何使其工作?因为日志显示没有错误,但pod不断重启。

有人可以帮我解决这个问题。

4 个答案:

答案 0 :(得分:0)

Red Hat的recommendation是使GID 0拥有的文件组 - 容器中的用户始终位于根组中。你不可能知道,但你可以选择性地公开要写入的文件。

第二种选择:  为了允许使用命名用户或root(0)用户的映像在OpenShift中构建,可以将项目的构建器服务帐户(system:serviceaccount :: builder)添加到特权安全上下文约束(SCC) 。或者,您可以允许所有图像以任何用户身份运行。

答案 1 :(得分:0)

您能否使用

查看日志
kubectl logs <podname> -p 

这应该会给出pod失败原因的错误。

答案 2 :(得分:0)

您正在看到这一点,因为您的映像启动的任何进程都不是一个长时间运行的进程,并且没有找到TTY,容器只是退出并重复重新启动,就openshift而言,这是一个“崩溃循环”。 / p>

你的dockerfile在下面提到:

ENTRYPOINT [“container-entrypoint”]

这个“容器入口点”到底在做什么?

你需要检查。

您是否对oc日志使用-p或--previous标志,以查看上一次尝试启动pod的日志是否显示任何内容

答案 3 :(得分:0)

我可以通过创建一个脚本来解决这个问题,因为&#34; run.sh&#34;结尾的内容:

while :; do
sleep 300
done

并在Dockerfile中:

ADD run.sh /run.sh
RUN chmod +x /*.sh
CMD ["/run.sh"]

这种方式有效,感谢大家指出原因,这有助于我找到解决方案。但有一个疑问我仍然知道为什么进程在这种情况下才会在openshift中退出,我已经尝试以相同的方式运行tomcat服务器,这样就可以正常工作而不需要在脚本中睡眠。