reactjs - wget 工作,但无法从 React 应用程序请求
问题描述
我有两个链接的 Docker 容器api
和frontend
. frontend
是容器内的 ReactJS 应用程序nginx
。这是 Dockerfile:
FROM nginx:alpine
COPY ./build /usr/share/nginx/html/
和运行命令:
docker run --name frontend --link api:api -p 80:80 frontend_img
当我sh
进去frontend
跑步时:
$ wget http://api:8080/api/users
工作正常,我能够获取用户。但是,当我的应用程序尝试获取数据时,ERR_NAME_NOT_RESOLVED
Chrome 控制台中出现错误。
这是我的 JS 代码:
fetchUsers() {
return axios.get('http://api:8080/api/users')
.then(response => response.data)
.then(users => this.setState({ users }));
}
我错过了什么?我是否需要在 NGINX 中配置某些东西才能从api
或其他东西中获取数据?
解决方案
解决了!感谢这个接受的答案docker nginx ERR_NAME_NOT_RESOLVED
当使用反向代理连接到容器时,应用程序使用的所有 URL 都需要指向该反向代理而不是应用程序。通常,您通过在 URL 中提供不带主机名的路径来执行此操作。
首先,我创建了一个default.conf
nginx 文件来添加一条location
语句以将调用重定向到我的 api 容器:
location /api/ {
proxy_pass http://api:8080;
}
然后,在我的 web 应用程序中,我更改了我的 JS 代码,所以我请求反对/api/users
,没有主机名:
fetchUsers() {
return axios.get('/api/users')
.then(response => response.data)
.then(users => this.setState({ users }));
}
最后,在 Dockerfile 中,我将默认default.conf
的 nginx 文件替换为已编辑的文件:
FROM nginx:alpine
COPY default.conf /etc/nginx/conf.d
COPY ./build /usr/share/nginx/html/
就这样!
推荐阅读
- python - Win32COM 代码不会替换公式参考中的 excel 字符串
- matrix - 两个矩阵之间的相似性
- php - 如何隐藏添加到购物车按钮的特定角色和产品类别 Woocommerce
- python - 如何生成张量流矩阵,其中几列中的第一列为 1,其余列为 0
- node.js - 我看似有效的 URL 在本地解析,但在部署在 heroku 上时失败
- reactjs - 如何在反应中通过 id 设置值?
- python - 每当我尝试使用张量板时,我都没有找到模块错误
- python - Python中的正负正则表达式
- azure - NLog 与 Application Insights - 将异常记录为异常而不是跟踪
- javascript - Javascript输入键修复