概述
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;
}
然后在位置 block 中使用它来代理传递所有请求。
location /api/ {
proxy_pass http://nodeapp/;
}
实际结果
当worker 2处于配置状态时(未运行的容器),我收到错误[emerg] 1#1: host not found in upper "appconfig_host-nodejs-app-worker_2:3000"
并且容器退出并显示代码 1。
当我从上游配置中删除第二个工作程序的行并仅保留工作程序 1 时,一切正常,代理按预期工作,在 /localhost/api/
处为我的 NodeJS 应用程序提供服务。
预期结果
我希望 Nginx 内置平衡工作,以便它保持向工作线程 2 发送请求,直到它再次事件。 IE。服务正常运行,上游没有worker 2,所以所有请求都转到worker 1。
请告知这里可能出了什么问题,因为我已经在几个小时内找不到任何方法来解决这个问题了。预先非常感谢。
最佳答案
问题是 nginx 在启动时(而不是请求时)尝试解析您在配置中定义的任何 DNS 名称,如果无法解析其中一个名称,则会失败。
检查此答案以获取可能的解决方案/解决方法:https://stackoverflow.com/a/32846603/1078969
关于docker - 当上游节点不可用时,Nginx 容器退出并显示代码 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48490111/