如果容器处于CrashLoopBackOff状态,如何执行到容器中并查看文件

时间:2019-04-04 14:46:48

标签: node.js docker kubernetes

我正在nodejs上运行基于kubernetes的应用程序,并且它处于CrashLoopBackOff状态。

kubectl logs api-5db677ff5-p824m

> api@0.0.1 staging /home/node
> NODE_ENV=staging node src/loader.js

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! api@0.0.1 staging: `NODE_ENV=staging node src/loader.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the api@0.0.1 staging script.
npm ERR! This is probably not a problem with npm. There is likely additional 
logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/node/.npm/_logs/2019-04-04T14_24_26_908Z-debug.log

日志中没有太多信息,我无法从容器中的给定路径访问完整的日志文件。

当我尝试检查容器中的文件时:

kubectl exec -it api-5db677ff5-p824m -- /bin/bash

这给了我这个错误:

  

错误:无法升级连接:找不到容器(“ api”)

2 个答案:

答案 0 :(得分:2)

如果您有权访问k8s节点,则可以访问/var/log/pods上(所有)pod的日志。

或者,您可以尝试将PVC安装到您的节点Pod,并配置您的节点应用程序以写入其中的日志。这样可以确保在容器崩溃时不会破坏崩溃日志。

另一种类似的方法是用sleep 3600覆盖pod容器命令,然后将exec覆盖到容器中以手动运行节点应用程序。一旦节点进程崩溃并写入日志,您就可以查看它们(在容器内部)。

希望这会有所帮助!

答案 1 :(得分:0)

您只能为处于“运行”状态的容器调用exec

如果容器处于CrashLoopBackOff状态,则无法执行此操作,因为您没有运行中的容器,K8可以调用命令。

获取该文件的唯一方法是将其保存到某个共享卷或主机目录,然后在此处进行检查。尝试检查卷documentation