Answers:
其他人提到docker logs $container_id
查看该应用程序的输出。这永远是我要检查的第一件事。
接下来,您可以运行docker inspect $container_id
以查看状态的详细信息,例如:
"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是由内核启动的,因此每次发生时,都会在中包含很多行/var/log/kern.log
,例如:
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
尽管可接受的答案是最好的选择,但有时从主机上检查日志的内容(在Linux上)也很有用。
您可以通过输入以下内容来实现:
sudo journalctl -u docker
或拖尾
sudo journalctl -u docker -f
或如果输出对于终端缓冲区而言太长,则将输出传递到更少
journalctl -xn -u docker | less
docker logs <container-id>
。