如何检测Docker容器是否崩溃

我每5分钟运行一次进程并检查以确保每个容器。如果容器不响应,我可以将其标记为下降。我有容器IP地址,然后循环浏览每个IP,并检查它是否响应Ping。如果没有,我将其标记为下降。有一个更好的方法吗?我的代码:

  1. @Transactional
  2. @Scheduled(fixedRate = 1000 * 60) //5 min
  3. public void monitorHosts(){
  4. Iterable<Ncl> ncls = nclRepository.findAll();
  5. for(Ncl ncl: ncls){
  6. for(String host: ncl.getHosts()){
  7. Boolean isHostAlive = isHostAlive(host);
  8. if(!isHostAlive){
  9. Ncl nclWorking = nclRepository.findOne(ncl.getUuid());
  10. if(nclWorking != null){
  11. Set<String> hosts = nclWorking.getHosts().stream().filter(x -> x.equals(host)).collect(Collectors.toSet());
  12. nclWorking.getHosts().clear();
  13. nclWorking = nclRepository.save(nclWorking);
  14. nclWorking.setHosts(hosts);
  15. nclRepository.save(nclWorking);
  16. }
  17. }
  18. }
  19. }
  20. }
  21. private Boolean isHostAlive(String host){
  22. try{
  23. InetAddress address = InetAddress.getByName(host);
  24. boolean reachable = address.isReachable(10000);
  25. return reachable;
  26. } catch (Exception e){
  27. e.printStackTrace();
  28. return false;
  29. }
  30. }

看答案

这主要取决于您需要处理有关容器的信息。

有许多可用的监视解决方案,可以监视您的容器,并在有一些麻烦时通知某些解决方案。

如果您必须在某些应用程序中使用此信息,则可以使用一些解决方案 领事 并让他们检查您的服务状态,而不是容器(在大多数情况下,人知道容器中的服务可用性,而不是容器本身)。或者您可以使用 Docker-Api 对于Java而言,因为ICMP协议并不总是一个好的解决方案,尤其是在分布式网络中。

未经允许不得转载:迪欧吧_技术交流_资源分享_热点资讯_免费VPS空间 » 如何检测Docker容器是否崩溃