Есть ли способ получить хост Ma c и IP-адрес внутри контейнера docker с помощью программ java - PullRequest
0 голосов
/ 19 июня 2020

Я пробовал приведенную ниже программу в системе, она возвращает 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;
    }

1 Ответ

0 голосов
/ 19 июня 2020

Согласно Docker docs , вы можете получить IP-адрес хоста, разрешив host.docker.internal. Поэтому попробуйте изменить первую строку в блоке try на:

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

Это сделано для целей разработки и не будет работать в производственной среде за пределами Docker Desktop для Ma c.

...