我有一个与此类似的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;
}
}
这是docker-compose.yaml
的{{1}}:
nginx
现在发生的事情是,当我运行# ...
services:
reverse-proxy:
# ...
ports:
- 5500:80
networks:
- my-net
networks:
my-net:
external:
name: my-net
和my-ui
(每个都使用自己的reverse-proxy
),然后转到docker-compose up
时,我得到了{{1 }}消息,而我的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
消息。我在这里想念什么?
PS:我不确定,但是添加curl -L http://my-ui
curl -L http://my-ui:5402
curl -L http://172.19.0.1
是基本的connection refused
应用程序并在Webpack开发服务器上运行可能会有用。
PS2:我也尝试传递主机头等,但结果相同
答案 0 :(得分:1)
容器的名称(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