从docker-compose运行的Nginx返回“在上游找不到主机”

时间:2020-03-02 19:23:16

标签: docker nginx docker-compose

我正在尝试通过将此docker-compose与nginx结合使用,为应用创建反向代理:

version: '3'
services:
  nginx_cloud:
    build: './nginx-cloud'
    ports:
        - 443:443
        - 80:80
    networks:
        - mynet
    depends_on:
        - app

  app:
    build: './app'
    expose:
        - 8000
    networks:
        - mynet

networks:
    mynet:

这是我的Nginx conf(简称):

 server {
  listen 80;
  server_name reverse.internal;

  location / {
    # checks for static file, if not found proxy to app
    try_files $uri @to_app;
  }

  location @pto_app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://app:8000;
  }
 }

当我运行它时,nginx返回:

[emerg] 1#1: host not found in upstream "app" in /etc/nginx/conf.d/app.conf:39

I tried several other proposed solutions without any success。奇怪的是,如果我通过可访问的容器内部的shell访问手动运行nginx,则可以ping app 等。但是可以从 docker-compose 或直接通过 docker运行本身不起作用。

我尝试设置一个单独的上游,添加docker内部解析器,等待几秒钟以确保该应用程序已在运行,等等。我知道这个问题已经被问过几次了,但是到目前为止似乎没有任何效果。

2 个答案:

答案 0 :(得分:1)

您可以尝试以下服务器定义吗?

server {
    listen       80;
    server_name  reverse.*;

    location / {
        resolver 127.0.0.11 ipv6=off;

        set $target http://app:8080;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass $target;
    }
}

答案 1 :(得分:1)

app服务可能无法及时启动。 要诊断问题,请尝试两步方法:

docker-compose up -d app

等待15到20秒(或启动应用程序所需的时间)

docker-compose up -d nginx_cloud

如果有效,则必须更新entrypoint服务中的nginx_cloud以等待app服务。