![](/img/trans.png)
[英]Docker- nginx -Reverse proxy : host not found in upstream when building with docker-compose
[英]nginx reverse proxy upstream fails in docker-compose with connection refused message
我有一个docker-compose.yaml
似的docker-compose.yaml
(为简单起见缩短):
# ...
services:
my-ui:
# ...
ports:
- 5402:8080
networks:
- my-net
networks:
my-net:
external:
name: my-net
我正在尝试使用以下配置将nginx
设置为反向代理:
upstream client {
server my-ui:5402;
}
server {
listen 80;
location / {
proxy_pass http://client;
}
}
这是我用于nginx
docker-compose.yaml
:
# ...
services:
reverse-proxy:
# ...
ports:
- 5500:80
networks:
- my-net
networks:
my-net:
external:
name: my-net
现在发生的情况是,当我运行my-ui
和reverse-proxy
(每个都使用自己的docker-compose up
),然后转到http://localhost:5500
,我收到一条Bad Gateway
消息,并且我的nginx
日志显示这个:
connect() failed (111: Connection refused) while connecting to
upstream, client: 172.19.0.1, server: , request: "GET / HTTP/1.1",
upstream: "http://172.19.0.5:5402/", host: "localhost:5500"
如果我exec
到我的nginx
容器并使用ping
:
ping my-ui
ping 172.19.0.5
两者都成功,但如果我想,例如, curl
:
curl -L http://my-ui
curl -L http://my-ui:5402
curl -L http://172.19.0.1
所有这些都失败并显示connection refused
消息。 我在这里缺少什么?
PS:我不确定,但补充一下my-ui
是一个基本的vuejs
应用程序,在 Webpack 开发服务器上运行可能会很有用。
PS2:我也尝试过传递主机头等,但结果相同
容器的名称 ( my-ui
) 解析为容器的 IP。 因此,您必须在上游提供容器的端口,而不是您映射到主机的端口。
upstream client {
server my-ui:8080;
}
server {
listen 80;
location / {
proxy_pass http://client;
}
}
您还可以使用主机名称配置上游并使用映射端口。 ( server <name of host>:5402
)但这可能会变得非常混乱,并且您将失去使用 docker 网络隔离服务的优势。
此外,您还可以删除端口映射,除非您需要在没有反向代理的情况下访问 Web 服务:
# ...
services:
reverse-proxy:
# ...
# ports:
# - 5500:80
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.