2

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

每当我创建图像时,都会创建新的 pod,但它会一次又一次地重新启动,最终状态为“CrashLoopBackOff”。

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

我今天遇到了下面的链接,上面写着“以 root 身份在容器内运行应用程序仍然存在风险,OpenShift 默认不允许您这样做,而是作为任意分配的用户 ID 运行。”

openshift pod 的 CrashLoopBackOff 状态是什么?

在这里,我的图像仅使用 root 用户,该怎么做才能使它工作?因为日志显示没有错误,但 pod 不断重启。

谁能帮我解决这个问题。

4

4 回答 4

1

Red Hat的建议是让文件组由 GID 0 拥有 - 容器中的用户始终在根组中。您将无法 chown,但您可以有选择地公开要写入的文件。

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

于 2016-03-02T14:16:21.453 回答
1

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

您的 dockerfile 在下面提到:

入口点 [“容器入口点”]

这个“容器入口点”实际上在做什么?

你需要检查。

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

于 2016-03-26T11:26:19.387 回答
0

你能看到使用的日志吗

kubectl logs <podname> -p 

这应该为您提供 pod 失败的错误。

于 2016-03-03T17:46:37.487 回答
0

我可以通过创建一个脚本作为“run.sh”来解决这个问题,最后的内容是:

while :; do
sleep 300
done

在 Dockerfile 中:

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

这样就可以了,谢谢大家指出原因,这帮助我找到了解决方案。但是我仍然有一个疑问,为什么只有在这种情况下进程会在 openshift 中退出,我尝试过以同样的方式运行 tomcat 服务器,这种方式在脚本中没有睡眠的情况下可以正常工作。

于 2016-03-29T10:59:37.573 回答