Nginx run from docker-compose 返回"host not found in upstream"



我正试图通过使用nginx和以下docker compose:来创建一个指向应用程序的反向代理

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

我尝试了其他几种建议的解决方案,但都没有成功。奇怪的是,如果我在nginx工作的容器内通过shell访问手动运行nginx,我可以ping应用程序等。但从docker compose或直接通过docker本身运行nginxs是不起作用的。

我尝试设置一个单独的上游,添加docker内部解析器,等待几秒钟以确保应用程序已经运行,等等,但运气不佳。我知道这个问题已经被问过好几次了,但到目前为止似乎都不起作用。

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

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

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

docker-compose up -d app

等待15-20秒(或应用程序启动并准备就绪所需的任何时间(

docker-compose up -d nginx_cloud

如果它有效,那么您必须在nginx_cloud服务中更新entrypoint以等待app服务。

最新更新