openshift pod 失败并频繁重启
openshift pod fails and restarts frequently
我正在使用我的 Docker 图片在 Origin 3.1 中创建一个应用程序。
每当我创建图像时,都会创建新的 pod,但它会一次又一次地重新启动,最终状态为 "CrashLoopBackOff"。
我分析了 pod 的日志,但它没有给出任何错误,所有日志数据都符合成功 运行 应用程序的预期。因此,无法确定原因。
我今天在link下面看到了"running an application inside of a container as root still has risks, OpenShift doesn't allow you to do that by default and will instead run as an arbitrary assigned user ID."
这里我的镜像只使用 root 用户,如何才能让它工作?因为日志显示没有错误,但 pod 不断重启。
谁能帮我解决这个问题。
Red Hat的recommendation是让文件组归GID 0所有——容器里的用户永远在root组里。您将无法 chown,但您可以有选择地公开要写入的文件。
第二种选择:
为了允许使用命名用户或根 (0) 用户的图像在 OpenShift 中构建,您可以将项目的构建器服务帐户 (system:serviceaccount::builder) 添加到特权安全上下文约束 ( SCC)。或者,您可以允许所有图像以任何用户身份 运行。
您可以使用
查看日志吗
kubectl logs <podname> -p
这应该会告诉您 pod 失败的原因。
您看到这个是因为无论您的映像启动的是什么进程,都不是一个很长的 运行 进程,并且没有找到 TTY,并且容器只是退出并反复重新启动,这是一个 "crash loop" 作为就 openshift 而言。
您的 dockerfile 在下面提到:
入口点["container-entrypoint"]
这个 "container-entrypoint" 到底在做什么?
你需要检查一下。
您是否对 oc 日志使用了 -p 或 --previous 标志以查看上次尝试启动 pod 的日志是否显示任何内容
我可以通过创建一个脚本 "run.sh" 来解决这个问题,最后的内容是:
while :; do
sleep 300
done
在 Dockerfile 中:
ADD run.sh /run.sh
RUN chmod +x /*.sh
CMD ["/run.sh"]
这样就可以了,谢谢大家指出原因,帮助我找到了解决方法。但是我仍然怀疑为什么仅在这种情况下进程会在 openshift 中退出,我已经以相同的方式尝试了 运行 tomcat 服务器,它在脚本中没有睡眠的情况下工作正常。
我正在使用我的 Docker 图片在 Origin 3.1 中创建一个应用程序。
每当我创建图像时,都会创建新的 pod,但它会一次又一次地重新启动,最终状态为 "CrashLoopBackOff"。
我分析了 pod 的日志,但它没有给出任何错误,所有日志数据都符合成功 运行 应用程序的预期。因此,无法确定原因。
我今天在link下面看到了"running an application inside of a container as root still has risks, OpenShift doesn't allow you to do that by default and will instead run as an arbitrary assigned user ID."
这里我的镜像只使用 root 用户,如何才能让它工作?因为日志显示没有错误,但 pod 不断重启。
谁能帮我解决这个问题。
Red Hat的recommendation是让文件组归GID 0所有——容器里的用户永远在root组里。您将无法 chown,但您可以有选择地公开要写入的文件。
第二种选择: 为了允许使用命名用户或根 (0) 用户的图像在 OpenShift 中构建,您可以将项目的构建器服务帐户 (system:serviceaccount::builder) 添加到特权安全上下文约束 ( SCC)。或者,您可以允许所有图像以任何用户身份 运行。
您可以使用
查看日志吗kubectl logs <podname> -p
这应该会告诉您 pod 失败的原因。
您看到这个是因为无论您的映像启动的是什么进程,都不是一个很长的 运行 进程,并且没有找到 TTY,并且容器只是退出并反复重新启动,这是一个 "crash loop" 作为就 openshift 而言。
您的 dockerfile 在下面提到:
入口点["container-entrypoint"]
这个 "container-entrypoint" 到底在做什么?
你需要检查一下。
您是否对 oc 日志使用了 -p 或 --previous 标志以查看上次尝试启动 pod 的日志是否显示任何内容
我可以通过创建一个脚本 "run.sh" 来解决这个问题,最后的内容是:
while :; do
sleep 300
done
在 Dockerfile 中:
ADD run.sh /run.sh
RUN chmod +x /*.sh
CMD ["/run.sh"]
这样就可以了,谢谢大家指出原因,帮助我找到了解决方法。但是我仍然怀疑为什么仅在这种情况下进程会在 openshift 中退出,我已经以相同的方式尝试了 运行 tomcat 服务器,它在脚本中没有睡眠的情况下工作正常。