java - 无论如何使用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;
}
解决方案
根据Docker 文档,您可以通过解析来获取主机的 IP 地址host.docker.internal
。因此,尝试将 try 块中的第一行更改为:
InetAddress inetaddress=InetAddress.getByName("host.docker.internal");
这是出于开发目的,不适用于 Docker Desktop for Mac 之外的生产环境。
推荐阅读
- mysql - 从具有相同列 ID 的 3 个表中选择记录
- c# - 页面中的装订样式
- c++ - 整数内存分配/释放
- amazon-web-services - 负载到 DynamoDB - 奇怪的数字
- prolog - 将结果标记到列表中?
- python - 为什么这个 Python 3.x 函数不起作用
- java - 在 Esper 中从 CSV 读取事件
- python - 我的 CI 作业以 root 身份创建 __pycache__,无法在下次运行时清理工作区
- ios - 无法使用 CGRect 更改 CollectionView 框架
- typescript - 打字稿重复 T 扩展 X 可能很麻烦,它们是更好的方法吗?