如何以编程的方式监控Docker容器是否退出?

10
我在我的VM主机上运行了多个命名的Docker容器(200+)。我有一个管理脚本/代码,它应该从主机上管理这些容器。我想知道是否有任何基于事件的机制,可以在容器停止/失败时通知我。以便我可以重新启动已停止的容器。
我能想到的一个解决方案是进行定期的docker检查,并查看State.Pid或State.Running来确认状态。
但是,与周期性轮询不同,如果当容器失败时,能够向管理程序通知pid/name,那么就可以只重启特定的容器。
一般而言,有没有办法从一个不是父进程的不同进程中编程地监视进程的状态?
3个回答

10

请查看Docker事件-其中有一个与容器“die”相关的事件。

还有一个HTTP接口可编程地获取相同的信息-请参见此处

您可能想搜索“docker编排”-许多项目正在涌现,以按照您描述的方式管理多个容器。


非常感谢。我正在寻找的是 docker events - Nataraj

3
如果你只想重启容器,为什么不使用重启策略呢?
docker run --restart=always IMAGE

1
谢谢您的建议。'重新启动'是其中一个用例。理想情况下,我应该能够从管理程序中做出更多的决策,而不仅仅是重新启动。 - Nataraj

0

psutil 似乎可以满足您的需求 http://pypi.python.org/pypi/psutil 来自 Python

import 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, 948, 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, 2429, 2442, 2445, 2449, 2451, 2457, 2461, 2471, 2489, 2490, 2491, 2493, 2497, 2501, 2505, 2509, 2513, 2524, 2546, 2549, 2551, 2554, 2563, 2567, 2572, 2573, 2576, 2578, 2586, 2595, 2598, 2624, 2644, 2655, 2665, 2667, 2687, 2689, 2693, 2699, 2744, 2752, 2785, 2789, 2794, 2798, 2804, 2817, 2820, 2830, 2838, 2856, 2862, 2864, 2886, 2903, 2935, 2972, 2985, 2986, 3138, 3164, 3211, 3368, 3371, 3557, 4125, 4352, 4443, 4444, 4743, 4818, 4819, 4840, 4841, 4844, 4845, 4866, 4876, 6142, 6363, 6366, 6372, 6378, 6385, 6391, 6452, 6518, 6524, 6531, 6555, 6558, 6601] p = psutil.Process(2862) p.status() 'sleeping'

谢谢。我会研究一下。 - Nataraj

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