docker - 当上游节点不可用时,Nginx 容器退出并显示代码 1

标签 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;
}

然后在位置 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/

相关文章:

c# - 如何在 Nginx 中使用不同的端口运行 C# ASP.NET Core 2.1 和 Node.js?

docker - 如何验证从 docker-compose 构建的 docker images 的有效性?

构建 docker 镜像时出现 Docker COPY 问题

docker - docker stack deploy (compose) 中有哪些 Docker 模板值可用?

docker - 在Traefik中禁用每个容器的访问日志

ruby-on-rails - Nginx:无法上传 > 10MB 的文件。客户打算发送过大的正文

perl - nginx 和 Perl : FastCGI vs reverse proxy (PSGI/Starman)

docker - 谁能解释 docker.sock

docker - 如何解释这个 docker 注册表创建命令?

php - 如何在 php 版本 8 中使用 docker-compose up official wordpress latest image?