概述
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。
请告知这里可能出现的问题,因为我已经找不到任何方法可以解决这个问题几个小时了。非常感谢。
答案 0 :(得分:1)
问题是nginx尝试解析您在启动时在配置中定义的任何DNS名称(而不是请求时间),如果它无法解析其中一个名称,则会失败。
检查此答案以获取可能的解决方案/解决方法:https://stackoverflow.com/a/32846603/1078969