How to know the reason why a docker container exits?
我有一个在1G RAM主机中运行的Docker容器(也有在同一主机中运行的其他容器)。 该Docker容器中的应用程序将解码一些图像,这可能会消耗大量内存。
该容器会不时退出。 我怀疑这是由于内存不足,但不是很 我需要找到根本原因的方法。 那么,有什么办法知道这个集装箱的死亡发生了什么?
其他人提到了
接下来,您可以运行
1 2 3 4 5 6 7 8 9 10 11 12 13 | "State": { "Status":"exited", "Running": false, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 0, "ExitCode": 2, "Error":"", "StartedAt":"2016-06-28T21:26:53.477229071Z", "FinishedAt":"2016-06-28T21:26:53.478066987Z" }, |
重要的一行是" OOMKilled",如果您超出了容器的内存限制并且Docker终止了您的应用程序,则该行将为true。您可能还需要查找退出代码,以查看其是否标识出您的应用退出的原因。
请注意,这仅表示docker本身是否会杀死您的进程,并要求您在容器上设置内存限制。在Docker外部,如果主机本身的内存不足,Linux内核可以大笑您的进程。发生这种情况时,Linux通常会在/ var / log中写入日志。使用Windows和Mac上的Docker Desktop,您可以在docker设置中调整分配给嵌入式Linux VM的内存。
您可以通过阅读日志来了解容器内的进程是否被OOM杀死。 OOMkill是由内核启动的,因此每次发生时,
1 2 3 4 | python invoked oom-killer: gfp_mask=0x14000c0(GFP_KERNEL), nodemask=(null), order=0, oom_score_adj=995 oom_kill_process+0x22e/0x450 Memory cgroup out of memory: Kill process 31204 (python) score 1994 or sacrifice child Killed process 31204 (python) total-vm:7350860kB, anon-rss:4182920kB, file-rss:2356kB, shmem-rss:0kB |