我正在使用Docker镜像在Origin 3.1中创建一个应用程序。
每当我创建图像时,都会创建新的pod,但会一次又一次地重新启动,最后将状态设置为" CrashLoopBackOff"。
我分析了pod的日志,但它没有出错,所有日志数据都是成功运行的应用程序的预期。因此,无法确定原因。
我今天在下面看到了链接,其中说"在root中运行应用程序仍然存在风险,OpenShift不允许你默认执行此操作,而是以任意方式运行用户ID。"
What is CrashLoopBackOff status for openshift pods?
这里我的图片仅使用root用户,如何使其工作?因为日志显示没有错误,但pod不断重启。
有人可以帮我解决这个问题。
答案 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服务器,这样就可以正常工作而不需要在脚本中睡眠。