【问题标题】:EADDRNOTAVAIL when Dockerizing Node.js appDockerizing Node.js 应用程序时的 EADDRNOTAVAIL
【发布时间】:2015-07-01 07:00:45
【问题描述】:

使用以下应用程序,我可以通过 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

更改端口并不能解决问题。我在下面包含了相关文件(某些部分替换为 {pseudocode})。任何帮助都会非常感激,因为我对 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;

【问题讨论】:

  • 您是否尝试在对 app.listen 的调用中硬编码端口和 IP 地址以查看读取配置是否存在问题?
  • 它能够读取配置,日志输出的其余部分说明来自 config.json 的变量(包括我删除的变量)。而且,如果我将 IP 传递为 0.0.0.0 之类的东西,它表示正在侦听 0.0.0.0:20000。我也尝试过硬编码,只是想看看它是否能修复它,不幸的是,它遇到了同样的错误。
  • app_host 设置成什么?它是在您的 Docker 容器中有效的 IP 地址吗?我相信 Docker 对其接口使用私有 IP 范围,因此您不能直接绑定到“外部”IP 号码。
  • 你用什么命令来运行容器?
  • @robertklep 设置为服务器的私有 IP。就像我说的,我对 Docker 毫无用处,所以我不知道我做不到。

标签: node.js docker dockerfile


【解决方案1】:

结果证明我的问题在 cmets 中的 robertklep 是正确的:问题是试图将服务器的 IP 显式传递到 app.js。这就是应用程序被配置为仅与 Node 一起工作的方式,但不能通过 Docker 完成。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 2020-06-18
    • 1970-01-01
    • 2021-09-30
    • 2020-10-08
    相关资源
    最近更新 更多