在运行具有端口转发的容器时,没有从node.js代码获取Docker容器的IP地址

我写了一个基本的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

欣赏任何领先。 谢谢

最后我find了解决scheme。 我试过IP NPM模块,并使用其function地址(),它对我来说工作正常。

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

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