在 Docker 容器中我有一个正在运行的开发服务器,其运行位置如下:
http://127.0.0.1:8000/
我尝试通过 nginx 向该服务器发出请求:
nginx.conf
upstream service_rest {
server restapi:8000;
}
server {
location /rest/ {
proxy_pass http://service_rest;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
}
我的理解是这样的:
- 当我输入 localhost:9000/rest/ (端口 9000 暴露给我的主机并映射到 nginx docker 服务)时,nginx 会在端口 8000 上向上游查找 service_rest 服务器 --> 这部分有效
- service_rest:8000 自动“知道”该请求是针对
http://127.0.0.1:8000/
容器内运行的开发服务器
但问题是:我认为请求永远不会被传递到运行在http://127.0.0.1:8000/
我收到以下消息作为日志:
nginx_1 | 2019/05/11 07:49:06 [错误] 6#6:*1 connect() 连接到上游时失败(111:连接被拒绝),客户端:192.168.32.1,服务器:,请求:“GET /rest/admin/HTTP/1.1”,上游:“http://192.168.32.2:8000/rest/admin/", 主机:“localhost:9000”
http://192.168.32.2:8000/rest/admin/
(桥接网络中容器的 ip)显然不等于,http://127.0.0.1:8000/
尽管我有点认为它们是相等的?
我对 docker 和 nginx 还不太熟悉,对此有点困惑。你们能帮忙吗?
答案1
对于感兴趣的人士:
诀窍是不要让开发服务器在本地主机上运行,而是在:
0.0.0.0:8000