首页 > 解决方案 > 无论如何使用java程序在docker容器中获取主机Mac和IP地址

问题描述

我在 System 上尝试过下面的程序,它返回主机 IP 地址,但是当作为 docker 容器运行时,它给容器 IP

public static Map<String, String> getMAC(){
        Map<String, String> dataMap = new HashMap<>();
        try{
            InetAddress inetaddress=InetAddress.getLocalHost(); //Get LocalHost refrence
            String ip = inetaddress.getHostAddress();  // Get Host IP Address
            dataMap.put("ip", ip);
            //get Network interface Refrence by InetAddress Refrence
            NetworkInterface network = NetworkInterface.getByInetAddress(inetaddress);
            byte[] macArray = network.getHardwareAddress();  //get Harware address Array
            StringBuilder str = new StringBuilder();

            // Convert Array to String
            for (int i = 0; i < macArray.length; i++) {
                str.append(String.format("%02X%s", macArray[i], (i < macArray.length - 1) ? "-" : ""));
            }
            String macAddress=str.toString();
            dataMap.put("mac", macAddress);
            //return dataMap; //return MAc Address
        }
        catch(Exception E){
            E.printStackTrace();  //print Exception StackTrace
            //return null;
        }
        return dataMap;
    }

标签: javaspring-bootdocker

解决方案


根据Docker 文档,您可以通过解析来获取主机的 IP 地址host.docker.internal。因此,尝试将 try 块中的第一行更改为:

InetAddress inetaddress=InetAddress.getByName("host.docker.internal");

这是出于开发目的,不适用于 Docker Desktop for Mac 之外的生产环境。


推荐阅读