在本地 – 在Nginx容器上使用代理到Node Express容器的React App

这应该是非常简单,但看起来像我失去了一些非常基本的东西,任何帮助将不胜感激。

我在本地MacBook上运行POC。 基本的想法是使用create-react-app build脚本build React应用create-react-app并将其部署到本地的nginx-alpine容器中。 我能够做到这一点。 我能够访问index.html,看看我应该看到什么时候客户端容器正在运行。

我有一个运行在同一台本地机器上的node-express后端,它使用一个node docker镜像站立起来。 我能够设置这个,我能够击中这些图像从我的浏览器提供的端点。

问题是,我内部的api这些高端的端点叫做什么。 我已经在我的nginx.conf设置了proxy_pass ,并尝试了很多方法来设置它。 没有一个工作。 我已经尝试使用localhost ,累了使用127.0.0.1 ,尝试使用docker容器的IP地址,尝试使用docker service name ,尝试将其设置为我的nginx.conf upstream ,试图直接在proxy_pass使用后端URL。 没有任何工作

这里是代码…

http://localhost/ – >加载用户界面

http://localhost:3001/features – >返回我需要在UI上使用的JSON负载

http://localhost/admin – >是我的用户界面上的一个组件,它使用fetch API来加载path/features

nginx.conf

  upstream app_servers { server localhost:3001; } # Configuration for the server server { # Running port listen 80; root /usr/share/nginx/html; location / { try_files $uri /index.html; } # Proxying the connections connections location /features { proxy_pass http://app_servers; proxy_redirect off; 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_set_header X-Forwarded-Host $server_name; } } 

在我的configuration文件中是否有明显的错误?

使用这个docker-compose启动后端API,我不相信这是一个问题,因为我可以在浏览器中使用端点。 但在这里它是无辜的。

 version: '2' services: thing1: image: toggler-backend container_name: thing1 volumes: - ./backend:/src/backend ports: - "3001:3000" 

UI的Dockerfile是这个…

 FROM nginx:alpine COPY nginx.conf /etc/nginx COPY build /usr/share/nginx/html 

我现在用docker run命令启动UI。

 docker run -it -p 80:80 toggler-client 

问题是你的proxy_pass在nginx容器内运行。 有localhost和127.0.0.1都指向nginx容器本身。 你要做的是到达主机。 所以你有以下可能的select

在proxy_pass中使用主机IP

您可以在proxy_pass中使用您的主机的IP

在主机networking上运行nginx容器

在您的--network host run命令中,您可以在运行nginx容器时添加--network host 。 这将确保本地主机指向主机

在应用程序的容器networking上运行nginx

您也可以将nginx服务添加到您的docker-compose中,并将您的应用服务的名称用于proxy_pass。

或者你可以做一个docker network ls ,你会发现一个特定于你的撰写文件的networking。 你也可以使用它

我的build议是使其成为撰写文件的一部分。