如何以编程方式监视docker容器是否已退出?

时间:2014-11-13 08:09:06

标签: docker lxc

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

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

但是,如果管理员在容器发生故障时通过pid / name通知,而不是定期轮询,那么可以更好地重新启动特定容器。

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

3 个答案:

答案 0 :(得分:6)

查看docker events - 容器'die'有一个事件。

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

您可能希望对“docker orchestration”进行网络搜索 - 许多项目都会以您描述的方式管理多个容器。

答案 1 :(得分:3)

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

docker run --restart=always IMAGE

答案 2 :(得分:0)

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,948 ,954,996,1052,1061,1064,1067,1177,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()       '睡眠'