EADDRNOTAVAIL当Dockerizing Node.js应用程序

通过以下应用程序,我可以通过npm install / node app.js手动启动它。 问题是尝试通过Docker容器运行应用程序。

除了应用程序的其余部分(这并不重要,因为运行Docker容器甚至没有那么远),Dockerfile从GitHub中抽取代码,切换到该目录,然后运行app.js主机和端口从一个config.json文件)。 尝试使用服务器的IP地址(应该监听的内容)运行容器会导致以下错误:

uncaughtException: Error: listen EADDRNOTAVAIL Error: listen EADDRNOTAVAIL at errnoException (net.js:905:11) at Server._listen2 (net.js:1024:19) at listen (net.js:1065:10) at net.js:1147:9 at dns.js:72:18 at process._tickCallback (node.js:442:13) at Function.Module.runMain (module.js:499:11) at startup (node.js:119:16) at node.js:929:3 

更改端口并不能解决问题。 我已经包含了下面的相关文件(用{伪代码}replace某些部分)。 任何帮助将非常感激,因为我对Docker绝对没有希望。

Dockerfile:

 FROM centos:centos6 RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm RUN yum install -y npm git RUN git clone {repo.git} COPY . /src RUN npm install CMD ["node", "app.js"] 

config.json:

 { "app_host": "{IP of server}", "app_port": "20000" } 

app.js:

 var server = app.listen(config_json.app_port, config_json.app_host, function () { var host = server.address().address; var port = server.address().port; console.log('\n listening at http://%s:%s', host, port); }); module.exports = app; 

在注释中发现robertklep对我的问题是正确的:问题是试图显式传递服务器的IP到app.js. 这就是应用程序configuration为仅通过Node自身工作的方式,但是Docker无法完成此操作。

唯一需要更改的代码是从app.listen中的app.listen中删除config_json.app_host 。 然后,通过将暴露的端口绑定到服务器上的任何可用端口来运行容器,将使其运行。