当 运行 具有端口转发的容器时,无法从 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(),它对我来说工作正常。
我写了一个基本的 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(),它对我来说工作正常。