当 运行 具有端口转发的容器时,无法从 node.js 代码获取 docker 容器的 IP 地址

Not getting the IP address of the docker container from node.js code when run the container with port forwarding

我写了一个基本的 node.js 代码来获取主机的 IP。代码如下所示:

var express = require('express');
var os = require('os');
var app = express();
var interfaces = os.networkInterfaces();


app.get('/',function(req,res){
var addresses = [];
for (var k in interfaces) {
    for (var k2 in interfaces[k]) {
        var address = interfaces[k][k2];
        if (address.family === 'IPv4' && !address.internal) {
            addresses.push(address.address);
        }
    }
}
  res.send("IP address of container  :  " + addresses);
});

app.listen(3000);

当我在本地机器上 运行 这段代码时,我会得到正确的 IP

但是当我使用 Docker 文件容器化我的应用程序时:

FROM centos:7

MAINTAINER Vaibhav Jain <vaibhavjain882@gmail.com>

RUN yum -y install curl

RUN curl --silent --location https://rpm.nodesource.com/setup_4.x | bash -

RUN yum -y install nodejs

RUN mkdir "/ecsTest"
WORKDIR /ecsTest

ADD node_modules node_modules
ADD app.js package.json ./

CMD ["node","app.js"]

和运行带有端口转发的容器 我没有获取 IP

用于运行安装容器的命令:

docker 运行 -d -p 3000:3000 image_name

感谢任何潜在客户。 谢谢

您需要在 Dockerfile 中公开端口 3000:

EXPOSE  3000
CMD ["node","app.js"]

我终于找到了解决方案。 我尝试了 IP npm 模块并使用了它的函数 address(),它对我来说工作正常。