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

Docker 上游节点不可用时,Nginx容器退出,代码为1,docker,nginx,docker-compose,nginx-reverse-proxy,Docker,Nginx,Docker Compose,Nginx Reverse Proxy,概述 Nginx在Docker容器中运行,NodeJS应用程序(worker)也在另一个容器中运行,所有这些都由Docker Compose管理。配置有一个上游:辅助进程1的容器也已启动并运行,而具有辅助进程2的节点则未启动 upstream nodeapp { server appconfig_host-nodejs-app-worker_1:3000; server appconfig_host-nodejs-app-worker_2:3000; } 然后在位置块中使用它来

概述

Nginx在Docker容器中运行,NodeJS应用程序(worker)也在另一个容器中运行,所有这些都由Docker Compose管理。配置有一个上游:辅助进程1的容器也已启动并运行,而具有辅助进程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:在上游“appconfig_host-nodejs-app-worker_2:3000”中找不到主机
,容器以代码1退出

当我从上游配置中删除带有第二个worker的line,并只保留worker 1时,一切正常,代理按预期工作,在
/localhost/api/
为我的NodeJS应用程序提供服务

预期结果

我希望Nginx内置的平衡功能能够正常工作,这样它就可以保持向worker2发送请求,直到它再次激活为止。即,服务正常运行,上游没有辅助工2,因此所有请求都转到辅助工1


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

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


检查此答案以了解可能的解决方案/解决方法:

请共享您的撰写文件。感谢@vivekyad4v的关注,下面的帖子实际上就是答案,我可以确认它有帮助。谢谢@whites11。事实上,DNS解析是一个问题。我用IP地址替换它们时没有问题。这不是很方便,所以现在看看您建议的解决方案。感谢你的时间和帮助。你还有代码可以发布答案吗?@DouglasFerreira不幸的是,没有。只需使用IP地址,无需任何更好(相当简单)的选择。