为什么在本地运行的服务会在 docker 中频繁收到终止信号?

Why would a service that works locally be getting kill signals frequently in docker?

我在 minikube (kubernetes) 开发环境中的 docker 容器中托管了一个通用的 React 应用程序。我使用 virtualbox,实际上我在这个虚拟机上有更多的微服务。

在这个 React 应用程序中,我使用 pm2 在服务器代码更改时重新启动我的应用程序,并在客户端代码更改时使用 webpack hmr 热重载客户端代码。

每隔 15-45 秒,pm2 会向我记录以下消息,表明该应用程序因 SIGKILL.

而退出
App [development] with id [0] and pid [299], exited with code [0] via signal [SIGKILL]

我一辈子都弄不明白为什么会这样。它相对频繁,但不会频繁到每秒发生一次。这很烦人,因为每次发生这种情况时,我的 webpack 包都必须重新编译。

pm2 可能会在此类开发环境中收到 SIGKILL 的一些原因是什么?另外,有哪些可能的调试方法?

我注意到我使用 pm2 在服务器更改时重新启动的服务在它们只是后端服务时没有这个问题。 IE。当他们没有 webpack。此外,我在应用程序的生产版本中没有看到这些 SIGKILL 问题。这对我来说表明 webpack hmr 设置、pm2 和 minikube / docker.

的组合存在一些问题

我已经在本地试用了该应用程序(不在 docker /minikube 中)并且它在没有任何 sigkill 的情况下工作正常,所以它不能单独作为 webpack hmr。 kubernetes 是否会杀死使用大量内存的服务? (也许它认为我的应用程序正在使用大量内存)。如果不是这种情况,kubernetes 或 docker 发送 SIGKILL 的原因可能是什么?有什么办法可以调试吗?

非常感谢任何指导。谢谢

从您发布的错误消息中我无法完全判断,但这通常是内核 OOM Killer(Out of Memory Killer)取出您的进程的结果。这可能是因为您的进程只是使用了太多内存,或者您的容器上的 cgroup 设置过于激进并导致它被杀死。您的 VirtualBox 实例的内存分配也可能不足。

通常您会看到 Docker 报告容器在 docker ps -a

中以代码 137 退出

dmesg 或者您在相关节点上的系统日志可能会显示内核 OOM 杀手输出。