docker内部的Nginx反向代理不遵守上游的端口设置

docker内部的Nginx反向代理不遵守上游的端口设置,docker,nginx,Docker,Nginx,我正在尝试使用官方的nginx docker image()为另一个docker容器中的api web服务器提供静态内容和反向代理。它们都是由docker compose调用启动的,因此它们应该是同一网络的一部分 当我查看日志时,我看到类似这样的错误,其中nginx无法与上游服务器通信。我关心的是我看到了http://localhost/users?sort=lastName%2Cdesc而且它似乎没有遵守上游的端口设置,这当然会失败。我不知道应该是什么样的配置来匹配它。我读过的所有指南都结合了

我正在尝试使用官方的nginx docker image()为另一个docker容器中的api web服务器提供静态内容和反向代理。它们都是由docker compose调用启动的,因此它们应该是同一网络的一部分

当我查看日志时,我看到类似这样的错误,其中nginx无法与上游服务器通信。我关心的是我看到了
http://localhost/users?sort=lastName%2Cdesc
而且它似乎没有遵守上游的端口设置,这当然会失败。我不知道应该是什么样的配置来匹配它。我读过的所有指南都结合了uri声明和上游url声明(带或不带结尾斜杠),但这些都不能满足我的需要

[错误]7#7:*3连接到上游时没有实时上游,客户端:10.0.2.2,服务器:localhost,请求:“GET/api/users?sort=lastName%2Cdesc HTTP/1.1”,上游:,主机:“localhost”,引用方:“

码头工人 API在8081上
客户机在8080上
客户端应将带有/api/*的任何内容转发给8081 docker,并去掉/api/部分

Dockerfile 将所有静态html复制到/usr/share/nginx/html中,并将配置复制到/etc/nginx/nginx.conf中

FROM nginx
COPY . /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf
RUN rm -f /usr/share/nginx/html/Dockerfile
RUN rm -f /usr/share/nginx/html/nginx.conf
nginx.conf 来自nginx的日志
不能使用
localhost
引用其他容器地址。您可以将容器想象成一台独立的机器,显然使用
localhost
不会让您连接到邻居或朋友的计算机。当两台计算机位于同一网络中时,您可以使用它们相应的网络IP或主机名在它们之间创建通信

它在Docker中的工作原理完全相同。如果要连接到同一网络中的其他容器,则需要使用其ip(可以通过
docker network inspect
)或主机名,在这种情况下,主机名将与容器名称相同

因此,您的
nginx.conf
不是:

location /api/ {
    proxy_pass http://localhost:8081/;
}
应包括:

location /api/ {
    proxy_pass http://API_CONTAINER_NAME:8081/;
}

哦,天哪,我忘了我的docker网络基础。出于某种原因,我认为“同一网络上的所有人”意味着他们都连接到同一个magic docker主机,而实际上这意味着你不必在容器之间链接。啊。谢谢大家。
location /api/ {
    proxy_pass http://localhost:8081/;
}
location /api/ {
    proxy_pass http://API_CONTAINER_NAME:8081/;
}