我在docker容器中运行一个简单的react应用。在开发过程中,我使用package.json
中的代理密钥来指定我的后端API url:"proxy": "http://localhost:5000"
当我在本地运行npm start
时,一切正常。然而,当我在Docker容器中运行npm start
时,它指向"http://localhost:3000"
。我也尝试手动设置代理,如下面的Dockerfile所示,但似乎什么都不起作用:
FROM node:13-alpine
WORKDIR /app
# install dependencies
COPY package*.json ./
RUN npm install --silent
# copy source code
COPY src/ ./src/
COPY public/ ./public/
RUN npm config set proxy http://localhost:5000 # set manully
CMD ["npm", "start"]
字符串
是我做错了什么,还是这不可能?
4条答案
按热度按时间pepwfjgg1#
在Docker中运行应用时,您需要将端口设置为后端服务而不是localhost。例如,检查以下Docker容器及其服务。我们在端口
3000
中运行前端,在端口5000
中运行后端。因此,将localhost替换为"proxy": "http://backend:5000"
字符串
pgky5nke2#
"proxy": "http://localhost:5000"
在开发阶段工作得很好,因为webpack DevServer会自己处理部署。一旦你部署了你的React应用程序,它停止运行。我在尝试让我的容器化React应用程序与容器化API对话时遇到了同样的问题。我使用Nginx作为Web服务器来服务React应用程序。我遵循此guide将Nginx与Docker集成容器。这是nginx.conf
最初的样子:字符串
但是在我做了一些调整之后,我想出了这个配置(我将在一点上谈论API代表什么):
型
什么改变了?我为API端点添加了一个根位置,因为它们都有一个共同的前缀
/api
。proxy_pass
属性允许我们将所有到达/api
的请求代理到通过端口8000公开的后端。api
只是docker-compose.yaml
中定义的容器的名称。作为参考,这是我的React应用的Dockerfile:
型
最重要的文件(docker-compose.yaml):
型
4nkexdtk3#
如果你使用的是Docker,在客户端的package.json中,将“proxy”:“http://localhost:5000”改为“proxy”:“https://<container_name>:5000”
例如,由于我将express容器命名为“express-server”,因此需要添加以下内容:
字符串
x1c 0d1x的数据
iovurdzv4#
将localhost替换为服务器容器名称帮助了我。