如何知道Docker容器为什么停止?

45

我有一个包含JVM进程的Docker容器。当进程结束时,容器将完成并停止。

尽管很少见,但我的JVM可能会突然发生硬故障,例如OutOfMemoryError。当这种情况发生时,我的容器就像正常的JVM退出一样停止运行。

我可以为普通的JVM日志记录设置分布式日志等机制,但在这种硬故障情况下,我想知道JVM的最后话语,这些话通常会在stderr上被输出。

是否有一种方式可以了解为什么我的容器停止运行,查看日志、stderr或类似的内容?


4
停止的容器在docker logs中会显示什么?您尝试订阅事件了吗?docker守护程序公开了一个API:https://docs.docker.com/reference/api/docker_remote_api_v1.16/ - Andy
1
容器已经不存在了,也就是说当我执行docker ps时它不在了,所以我不知道如何获取它的日志。我会查看事件API。我有监控,所以我知道JVM已经停止运行了...只是我不知道最后输出到stderr的那些消息,因为它们没有被记录下来(在OOM的情况下,记录器可能甚至无法工作)。 - Greg
28
即使容器已停止,您仍可以运行“docker logs [ContainerName]”或“[ContainerID]”命令。您可以使用“docker ps -a”查看它们。 - Usman Ismail
你能否将答案标记为已接受? - mikemaccana
1个回答

60
您可以在已停止的容器上运行docker logs [ContainerName]docker logs [ContainerID]命令。 您可以使用docker ps -a查看它们。
来源: Usman Ismail的评论,这只是将他的评论转换为正确答案的一种方式。

1
如果我的 docker logs [ContainerName] 没有返回任何内容怎么办? - Max Wong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接