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

Nginx container exits with code 1 when upstream node is not available

概览

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 内置平衡工作,以便它保持向 worker 2 发送请求,直到它再次活动。 IE。服务正常运行,上游没有worker 2,所以所有请求都转到worker 1。

请告知这里可能出了什么问题,因为我已经几个小时都找不到任何方法来解决这个问题。提前致谢。

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

检查此答案是否可能solutions/workarounds:

“Nginx 容器退出,代码为 1”。

此错误也可能是由 .conf 文件中的语法错误引起的,例如在 name:value 对之间插入冒号,但由于混杂,您不应该这样做不同配置文件的语法规则。

您很有可能找到指向日志文件中相关行的投诉。