通过NodeJS获取Docker主机IP

时间:2018-11-02 14:41:13

标签: node.js docker

我正在编写一个NodeJS应用程序,其中试图从docker容器内部获取docker主机IP。我正在使用的节点API似乎只能获取docker容器IP。

我正在使用os API的第一种方法:

require('dns').lookup(require('os').hostname(), function (err, add, fam) {
  console.log("os.gethostname API reports as: " +add);
})

os.gethostname API报告为:172.17.0.2

我也尝试过

getDockerHost = require('get-docker-host');
isInDocker = require('is-in-docker');

checkDocker = () => {
    return new Promise((resolve, reject) => {
        if (isInDocker()) {
            getDockerHost((error, result) => {
                if (result) {
                    resolve(result);
                } else {
                    reject(error);
                }
            });
        } else {
            resolve(null);
        }
    });
};

checkDocker().then((addr) => {
    if (addr) {
        console.log("'get-docker-host'API' IP reports as: " + addr);
             console.log("END");
    } else {
        console.log('Not in Docker');
    }
}).catch((error) => {
    console.log('Could not find Docker host: ' + error);
});

'get-docker-host'API'IP报告为:172.17.0.1

当我通过Bash获取机器的IP时,就会得到这个。.

sh-3.2# ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'
10.106.117.79

因此,节点API调用必须获取docker容器IP。有没有办法获取主机IP?

1 个答案:

答案 0 :(得分:2)

使用host.docker.internal主机名,它将解析为运行容器的主机的IP。