首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从Node.js中的docker获取主机ip

从Node.js中的docker获取主机ip
EN

Stack Overflow用户
提问于 2018-07-16 21:40:16
回答 1查看 3K关注 0票数 0

我正在尝试使用在Docker容器中运行的node.js检索主机IP。

我正在做一些测试,我正在使用this npm包。

它似乎起作用了,但我有以下两个问题:

  • 我必须找到一种让函数等待响应的方法(异步/等待似乎不起作用)
  • 我不知道它使用docker swarm是否能正常工作。

我的节点应用如下:

代码语言:javascript
复制
dockerhost = require(`get-docker-host`),
isInDocker = require(`is-in-docker`),

function dockerHost() {
    dockerhost(async (error, result) => {
        if (result) {
            console.log(result);
            return await result;
        } else if (error) {
            console.log(error);
            return await error;
        }
    })
}


if(isInDocker()) {
    console.log("My Docker host is " + dockerHost());
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-17 08:38:10

get-docker-host是异步的,因为它接受一个回调函数并在以后调用它,但它不返回promise,所以我认为你不能使用async/await语法来调用它。您不能阻止它返回;您可以将您的主应用程序放在回调后面,或者手动将其包装在promise中。在MDN async/await documentation中有一些示例。

下面是一个将get-docker-host结果包装在promise中的工作示例。如果它不在get-docker-host中,那么promise将使用null地址进行解析;如果是,并且Docker成功,它将使用主机地址进行解析,如果不在Docker中,则会失败并显示相应的错误。

index.js

代码语言:javascript
复制
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('Docker host is ' + addr);
    } else {
        console.log('Not in Docker');
    }
}).catch((error) => {
    console.log('Could not find Docker host: ' + error);
});

Dockerfile

代码语言:javascript
复制
FROM node:10
COPY package.json yarn.lock ./
RUN yarn install
COPY index.js ./
CMD ["node", "./index.js"]

运行它:

代码语言:javascript
复制
% node index.js
Not in Docker
% docker build .
Sending build context to Docker daemon   21.5kB
...
Successfully built e14d41aa0c9b
% docker run --rm e14d41aa0c9b
Docker host is 172.17.0.1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51363243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档