首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将API从被停靠的web页面调用到后端服务器,最终以net::ERR_CONNECTION_REFUSED结束。

将API从被停靠的web页面调用到后端服务器,最终以net::ERR_CONNECTION_REFUSED结束。
EN

Stack Overflow用户
提问于 2016-12-02 11:57:40
回答 3查看 1.2K关注 0票数 2

我有两个集装箱在运行:

  • 一种基于nginx的前端应用程序/容器(在浏览器中打开的网页),它试图在"/search“端点进行API调用。网页是静态的,可以通过将网页内容复制到/usr/share/nginx/html中获得。
  • 端口8080上可用的后端服务器。

为什么我不能为/search提出一个GET请求,这样这个请求就可以由后端处理?

我总是在浏览器的控制台中获得net::ERR_CONNECTION_REFUSED,即使我已经链接了它们。

这是我的配置:

代码语言:javascript
复制
services:
   backend:
      image: docker.xxxxx.net/yyyyyy/zzzzzzzz:latest
      expose:
         - "8080"
      ports:
         - "8333:8080"

   frontend:
      build:
         dockerfile: Dockerfile
         context: .
      depends_on:
         - "backend"
      links:
         -  backend
      ports:
         - "80:80"
      volumes:
         - ./build:/usr/share/nginx/html

请注意,在另一台服务器上只启动后端允许我进行API调用(这时出现的唯一问题是CORS),因此后端代码是可以的,问题肯定是在错误的码头配置中。

我可以清楚地打开前端,但我不能进行任何API调用:我尝试了很多东西,比如调用:

  • http://backend/search?q=test
  • http://backend:8080/search?q=test
  • http://backend:8333/search?q=test
  • http://frontend/search?q=test
  • http://frontend:8080/search?q=test
  • http://frontend:8333/search?q=test

结果是一样的。有什么不对的?

EN

回答 3

Stack Overflow用户

发布于 2016-12-02 12:17:12

我假设GET请求是从您的浏览器发出的,即来自主机,而不是来自前端容器。根据您的配置,8080从后端容器公开到前端容器,端口8333公开给码头主机。因此,只能从前端容器中看到http://backend:8080,而不能从主机上看到。因此,可能必须是http://<docker_ip>:8333/search?q=test才能从后端容器获得响应。

票数 2
EN

Stack Overflow用户

发布于 2016-12-02 12:11:41

尝试通过docker提供的环境变量与源坞进行通信。请参阅

票数 0
EN

Stack Overflow用户

发布于 2016-12-02 12:12:06

用nginx处理您的CORS错误。

在nginx.conf中配置反向代理。

代码语言:javascript
复制
server {
    listen 80 default_server;
    server_name _;

      location /search {
       proxy_pass http://backend:8080;
    }
...
}

这(或类似的)应该可以解决net::ERR_CONNECTION_REFUSED权限错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40931707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档