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”消息杀死的主要内容,如果未能解决你的问题,请参考以下文章