如何以编程方式监控 docker 容器是不是退出?

Posted

技术标签:

【中文标题】如何以编程方式监控 docker 容器是不是退出?【英文标题】:How to programmatically monitor if a docker container exited?如何以编程方式监控 docker 容器是否退出? 【发布时间】:2015-01-10 07:32:40 【问题描述】:

我在我的 VM 主机上运行多个命名的 docker 容器 (200+)。 我有一个管理器脚本/代码,它应该管理来自主机的容器。 我想知道是否有任何基于事件的机制可以在容器停止/失败时获得通知。这样我就可以重新启动停止的容器。

我能想到的一个解决方案是定期进行 docker 检查并查看 State.PidState.Running 以确认状态。

但是,与其定期轮询,不如在容器发生故障时通过 pid/name 通知管理器,以便仅重新启动特定容器。

一般来说,有没有办法以编程方式监控来自非父进程的不同进程的状态?

【问题讨论】:

【参考方案1】:

查看docker events - 容器“死亡”有一个事件。

还有一个 http 接口可以以编程方式获取相同的信息 - 请参阅here

您可能希望在网络上搜索“docker 编排” - 许多项目如雨后春笋般涌现,以您描述的方式管理多个容器。

【讨论】:

非常感谢。 docker events 是我要找的。​​span> 【参考方案2】:

如果您只想重新启动容器,为什么不使用restart policy?

docker run --restart=always IMAGE

【讨论】:

感谢您的建议。 “重启”是用例之一。理想情况下,我应该能够做出更多的决定,而不仅仅是从经理程序重新开始。【参考方案3】:

psutil 似乎做你想做的事 http://pypi.python.org/pypi/psutil 来自 Python

导入psutil psutil.pids() [1、2、3、5、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23、24、25、26、27 , 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53 , 54, 56, 57, 58, 59, 61, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82 , 94, 97, 98, 117, 118, 137, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 200, 201, 210, 211, 213, 214, 229, 230, 411 , 416, 419, 526, 527, 542, 543, 544, 545, 555, 569, 625, 709, 714, 756, 781, 782, 796, 862, 863, 864, 869, 914, 944, 945, 94 ,954,996,1052,1061,1064,1067,1170,1174,1179,1180,1183,1234,1240,1241,1245,1323,1328,1340,1351,1354,1390,1408,1457,1507,1531 ,1631,1662,1933,1972,1981,1987,1989,1993,2346,2348,2413,2422,2:2451,245,249,2451,2457,2461,2471,2457,2461,2471,2489,2490,2491,2493,2490,2491,2493,2497 ,2501,2505,2509,2513,2524,2546,2549,2551,2554,2563,2567,2572,2573,2576,2578,2586,2595,2598,2586,2595,2598,2624,2595,2555,2665,2667,265,2665,2667,2687,2689 , 2693, 2699, 2744,2752,2785,2789,2794,2798,2804,2817,282,2830,2838,2856,2862,2864,286,2862,2864,2886,2903,2935,2972,2985,2986,3138,3164,3211,3138,3164,3211,3368,3371, 3557,4125,4352,4443,4444,4743,4818,4819,4840,4841,4844,4845,4866,4876,42,6363,6366,6372,6378,6366,6391,6452,6385,6391,6452,6518,6524,6531, 6555、6558、6601] p = psutil.Process(2862) p.status() '睡觉'

【讨论】:

谢谢。会调查的。

以上是关于如何以编程方式监控 docker 容器是不是退出?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式(在 Docker 上)获取运行容器的容器 ID?

Docker容器开机自动启动

docker查看日志命令

如何快速部署 Prometheus?- 每天5分钟玩转 Docker 容器技术(85)

如何知道 docker 容器退出的原因?

Docker容器进入退出的几种方式