Docker 进程被神秘的“Killed”消息杀死

Posted

技术标签:

【中文标题】Docker 进程被神秘的“Killed”消息杀死【英文标题】:Docker process killed with cryptic `Killed` message 【发布时间】:2017-11-09 01:45:19 【问题描述】:

在 docker 容器中运行 python 脚本,一切似乎都运行顺利,看到一些 STDOUT 消息,大约 5 分钟后,我收到一条 Killed 消息,没有进一步解释,进程停止。查询数据库,因此可能是磁盘空间问题,也可能是 OOM 问题。我不确定,但我不知道在哪里可以找到有关此终止消息的日志,以便找到问题的根源。这些日志在哪里有什么想法吗?

在 Mac OSX 上运行 docker-machine。

这就是消息所说的全部内容!

root@c7b800e0f276:/opt/mymodule# python
Python 2.7.13 (default, May  1 2017, 22:44:36)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from mymodule import model
>>> model.run('2017-04-01')
INFO:Deleting from input table.
INFO:Inserting into input table.
INFO:Querying input table for chunk.
Killed
root@c7b800e0f276:/opt/mymodule# exit

谢谢!

【问题讨论】:

发布 stdout 'killed' 消息。至于日志,请查看Configure logging drivers 文档。 我发誓这就是我收到的所有信息!还是把它贴在上面@vmg Killed 通常意味着 SIGKILL,OOM 是最常见的原因。在 Linux 中,dmesg 会告诉你是否是这种情况,不确定 OSX。 【参考方案1】:

使用 Docker for Mac,您可以通过以下方式进入主机 VM 命名空间:

docker run --net=host --ipc=host --uts=host --pid=host -it --security-opt=seccomp=unconfined --privileged --rm -v /:/host alpine /bin/sh

然后运行 ​​chroot /host 将 root 更改为主机挂载。现在,您可以使用dmesg 之类的实用程序来检查任何 OOM 消息(例如您的问题建议的 cmets)。

【讨论】:

仅使用--privileged 标志已经让我使用dmesg 实用程序。【参考方案2】:

Docker for Mac 默认将可用资源限制为 2GB!这对于我运行的应用程序来说太低了。解决方案是将内存限制增加到 8GB,或者您的应用需要多少。

(我遇到了类似的问题,尽管使用的是 JVM 应用程序,而不是 Python,并且通过 Google 搜索到达这里。从 @sergiu 删除的答案中,我能够找出问题所在。)

Get started with Docker for Mac 说:

高级设置是:

CPU:默认情况下,Docker for Mac 设置为使用主机上可用处理器数量的一半。要提高处理能力,请将其设置为更高的数字;要减少,请降低数字。

内存:默认情况下,Docker for Mac 设置为使用 2 GB 运行时内存,从 Mac 上的总可用内存中分配。要增加 RAM,请将其设置为更高的数字;要减少它,请降低数字。

交换:根据需要配置交换文件大小。默认为 1 GB。

【讨论】:

我认为这应该是公认的答案。消息“Killed”太无用了,它基本上是 docker 中的一个错误。 当然,“内存不足”并因此被杀死并不只适用于 MacOS!可以在 Unix 和 Windows 等其他 docker 主机上检查和配置相同的内容,也可以在 Kubernetes、OpenShift、AWS、GCP、Azure 等云服务上进行检查和配置...【参考方案3】:

发生这种情况是因为您的应用程序正在消耗所有可用的 RAM。 您可以监控 RAM 消耗并增加它。

这对我有用

【讨论】:

以上是关于Docker 进程被神秘的“Killed”消息杀死的主要内容,如果未能解决你的问题,请参考以下文章

杀死进程树而不在C中打印'Killed'

点安装 - 杀死

错误被杀死:命令“git add”后有 9 个。

无法杀死进程(源自docker容器)

conda env create 退出并验证交易:/被杀死

如何杀死oracle死锁进程