【问题标题】:React webapp request to flask server return ERR_CONNECTION_TIMED_OUT将 webapp 请求响应到烧瓶服务器返回 ERR_CONNECTION_TIMED_OUT
【发布时间】:2020-01-07 04:56:26
【问题描述】:

我的 docker-compose 中有三个组件,mysql dbflask serverreact webapp

当我在 chrome 中向服务器发出请求时,它给了我:

选项http://server:5000/getTablesnet::ERR_CONNECTION_TIMED_OUT

但是,如果我使用 docker exec -it 然后 curl -X POST server:5000/getTables 进入反应容器,它工作正常。

这就是我在烧瓶应用程序中设置 cors 的方式:

@app.route('/getTables', methods=['GET', 'POST', 'OPTIONS'])
@cross_origin(origin='*')

这是我的 docker-compose.yaml:

version: '3'

services:
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: 'TEST'
      MYSQL_USER: 'xxx'
      MYSQL_PASSWORD: 'xxx'
      MYSQL_ROOT_PASSWORD: 'xxx'
    ports:
      - '3306:3306'
    expose:
      - '3306'
    volumes:
      - my-db:/var/lib/mysql
  server:
    build: ./flask
    restart: on-failure
    ports:
      - '5000:5000'
    expose:
      - '5000'
    volumes:
      - ./flask:/server
  web:
    build: ./react
    ports:
      - 80:3000
volumes:
  my-db:

这是烧瓶服务器日志:

server_1  |  * Serving Flask app "app" (lazy loading)
server_1  |  * Environment: production
server_1  |    WARNING: This is a development server. Do not use it in a production deployment.
server_1  |    Use a production WSGI server instead.
server_1  |  * Debug mode: off
server_1  |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

我的 docker-compose 文件有什么问题吗?提前感谢您的帮助!

编辑 这似乎是与我的 react webapp 容器网络设置有关的问题。当我在本地运行 react 应用程序时,它可以正常工作,但是如果我将它放在 docker 中,它将无法连接到外部 API。

【问题讨论】:

  • 将烧瓶应用程序置于调试模式后,您的日志中是否有任何其他信息?
  • @ckaserer 如果我卷曲它,我的后控制器将记录请求信息。但是,如果我在浏览器中执行此操作,似乎控制器没有执行。

标签: reactjs docker flask networking docker-compose


【解决方案1】:

如果您可以从主机向localhost:5000 发送请求,那么您的 docker-compose 就可以了。你只需要添加

    127.0.0.1       server

给你的主机文件。

【讨论】:

  • 是的,我可以在主机上执行curl localhost:5000。您指的是哪个主机文件?
  • /etc/hosts 如果你在 linux 上。你可以google其他平台。我假设您正在主机上浏览 react 应用程序。所以它无法知道server 的确切IP,除非你告诉它。
  • 我的 react webapp 在 docker 容器中,我尝试进入容器,可以通过 curl 命令访问 URL server:5000。我还尝试将 react 应用程序中的连接 URL 更改为 localhost:5000 并且浏览器给了我 net::ERR_CONNECTION_REFUSED
  • 你的反应有服务器端渲染吗?如果是这样,您可以从 React Web 实例中卷曲您的服务器吗?
  • 不,我没有使用服务器端渲染。我的烧瓶服务器仅用于处理一些发布请求。是的,我可以从 React Web 实例中卷曲我的服务器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
  • 2020-10-22
  • 2019-05-27
  • 2017-08-02
  • 1970-01-01
  • 2016-08-04
  • 2020-12-18
相关资源
最近更新 更多