最近研究微服务,使用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-

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐