当上游节点不可用时,Nginx容器以代码1退出

时间:2018-01-28 18:51:05

标签: docker nginx docker-compose nginx-reverse-proxy

概述

Nginx在Docker容器中运行,NodeJS应用程序(worker)在另一个中运行,全部由Docker Compose管理。配置有一个上游:worker 1的容器也已启动并正在运行,而具有worker 2的节点则不是。

upstream nodeapp {
    server appconfig_host-nodejs-app-worker_1:3000;
    server appconfig_host-nodejs-app-worker_2:3000;
}

然后在位置块中使用它来代理传递所有请求。

location /api/ {
  proxy_pass http://nodeapp/;
}

实际结果

当worker 2处于配置状态(未运行的容器)时,我收到错误[emerg] 1#1: host not found in upstream "appconfig_host-nodejs-app-worker_2:3000",容器退出代码为1。

当我从上游配置中删除第二个工作线,并且只保留工人1时,一切正常,代理按预期工作,在/localhost/api/服务我的NodeJS应用程序。

预期结果

我希望Nginx内置平衡工作,以便它能够向工作者2发送请求,直到它再次存在。即服务正常运行,上游没有工作人员2,因此所有请求都发送给工作人员1。

请告知这里可能出现的问题,因为我已经找不到任何方法可以解决这个问题几个小时了。非常感谢。

1 个答案:

答案 0 :(得分:1)

问题是nginx尝试解析您在启动时在配置中定义的任何DNS名称(而不是请求时间),如果它无法解析其中一个名称,则会失败。

检查此答案以获取可能的解决方案/解决方法:https://stackoverflow.com/a/32846603/1078969