Docker 服务端口一览
最近,研究微服务,使用Docker来进行部署,说实话docker是个好东西,只要编写号dockfile文件和docker-compose.yml文件,能快速启动相关服务。咱们变发挥技术人的优势,能用程序搞定的绝不手动,找了一通,发现这个命令可以查看应用名称和端口的对应关系。便想到通过调用shell脚本的方式来获取内容,传送到前端页面进行展示!调试项目的时候必须输入一堆的ip和端口来,让人有点不爽。
·
最近研究微服务,使用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-
更多推荐
已为社区贡献11条内容
所有评论(0)