赞
踩
最近研究微服务,使用Docker来进行部署应用。说实话docker是个好东西,只要编写好Dockerfile文件和docker-compose.yml文件,便能快速启动并运行相关服务。
调试过程中查看服务可以使用
docker ps
然而调试项目的时候必须输入一堆的ip和端口来,让人有点不爽。
咱们发挥技术人的优势,能用程序搞定的绝不手工,找了一通,发现下面这个命令可以查看应用名称和端口的对应关系。
docker ps --format "{{.Names}} {{.Ports}}"
便想到通过调用shell脚本的方式来获取内容,传送到前端页面进行展示!
话不多说,下面上核心代码:
@Autowired HttpServletRequest request; @GetMapping({"", "/", "index"}) public String index(Model model) throws IOException { // 输出docker应用映射端口 String[] cmd = SystemUtils.IS_OS_WINDOWS ? new String[] {"cmd", "/C", "docker ps --format \"{{.Names}} {{.Ports}}\""} : new String[] {"/bin/sh", "-c", "docker ps --format \"{{.Names}} {{.Ports}}\""}; Process ps = Runtime.getRuntime().exec(cmd); BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream())); Map<String, Set<String>> map = new TreeMap<>(); String line; while ((line = br.readLine()) != null) { String name = StringUtils.substringBefore(line, " "); Set<String> ports = new TreeSet<>(); String portText = StringUtils.substringAfter(line, " "); for (String it : portText.split(",")) { String port = StringUtils.substringBetween(it, ":", "->"); if (StringUtils.isNotBlank(port)) { ports.add(port.replace(":", "")); } } map.put(name, ports); } model.addAttribute("baseUrl", StringUtils.substringBeforeLast(request.getRequestURL().toString(), ":")); model.addAttribute("map", map); return "index"; }
前端页面展示效果:
完整的代码请参考:
https://gitee.com/00fly/java-code-frame/tree/master/springboot-cache
-over-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。