Docker Nginx+;码头工人;连接到上游时没有带电的上游;与上游,但与代理_通行证工作良好

Docker Nginx+;码头工人;连接到上游时没有带电的上游;与上游,但与代理_通行证工作良好,docker,nginx,docker-compose,Docker,Nginx,Docker Compose,所以我一直面临着一个奇怪的问题,我不确定问题出在哪里。我正在使用docker compose运行一个容器,以下nginx配置非常有效: server { location / { proxy_pass http://container_name1:1337; } } 其中container_name是我在docker-compose.yml文件中提供的服务的名称。它完美地解决了IP问题,并且工作正常。但是,当我将上述文件更改为以下内容时: upstream backen

所以我一直面临着一个奇怪的问题,我不确定问题出在哪里。我正在使用docker compose运行一个容器,以下nginx配置非常有效:

server {
  location / {
        proxy_pass http://container_name1:1337;
  }
}
其中container_name是我在docker-compose.yml文件中提供的服务的名称。它完美地解决了IP问题,并且工作正常。但是,当我将上述文件更改为以下内容时:

upstream backend {
    least_conn;
    server container_name1:1337;
    server container_name2:1337;
}

server {
    location / {
        proxy_pass http://backend;
    }
}
它完全停止工作,在错误日志中,我得到以下信息:

2020/03/17 13:16:03 [error] 8#8: *11 no live upstreams while connecting to upstream, client: xxxxxx, server: codedamn.com, request: "GET /HTTP/1.1", upstream: "http://backend/", host: "xxxxx"
为什么呢?nginx在上游区块内时是否无法解析DNS?有人能帮忙解决这个问题吗

注意:这只发生在生产环境(Ubuntu 16.04)和本地环境(macOS Catalina)上,同样的配置可以正常工作。发现这一点后,我完全糊涂了。

更新1:以下工作:

upstream backend {
    least_conn;
    server container_name1:1337;
}

但不能使用多个服务器。为什么

好的。我明白了。这是因为,
docker compose
随机创建contianers,nginx会快速将容器标记为
down
(我在生产中部署该组件时遇到了一些流量)。应用程序容器还没有准备好,但nginx已经准备好了,所以它将它们标记下来并停止转发任何流量

目前,我没有同步
docker compose
container creation order(正如我所发现的,这有点不正常),而是禁用了nginx的失败尝试,通过写入以下内容自动将服务标记为down:

server app_inst1:1337 max_fails=0;
这使得nginx仍然可以将流量转发到特定的服务(并且我的docker被配置为在容器崩溃时重新启动容器),这很好