GCP实例为Ajax 127.0.0.1路由返回ERR_CONNECTION_REFUSED

时间:2019-03-23 06:20:46

标签: python docker flask google-cloud-platform bokeh

我有一个使用bokeh的Flask应用程序,该应用程序在Docker容器中运行,并且在本地计算机上使用时可以运行。

但是,当我将其部署到GCP实例时,即使可以访问服务器,也有一些AjaxDataSource()对象无法连接。

一些细节,

  • 所有计算机,本地和gcp vm都在运行Ubuntu 18.04
  • 烧瓶应用程序是这样启动的,

    app.run(host="0.0.0.0", port=6600, debug=False)

  • Ajax路由如下,

    http://127.0.0.1:6600/land/tmidemo/data_rate?name=ResultBaseKeysV1

  • GCP防火墙规则如下,

    Name                Type    Targets         Filters                 Protocols / ports       Action  Priority    Network
    tmiserver-egress    Egress  Apply to all    IP ranges: 0.0.0.0/0    tcp:6600    udp:6600    Allow   1000        default
    tmiserver-ingress   Ingress Apply to all    IP ranges: 0.0.0.0/0    tcp:6600    udp:6600    Allow   1000        default
    
  • docker容器是这样运行的,

    docker run --net tminet --hostname=TEST -p 6600:6600 -v $(pwd):/app/public --name myserver --rm myserver
    
  • 我没有使用Bokeh服务器。 AjaxDataSource()调用指向烧瓶应用程序,而不是其他(散景)服务器

有很多可行的方法,

  • 可以使用GCP外部IP地址并访问服务器
  • 从一个网页到另一个网页的工作正常,因此烧瓶路由正常工作

什么是的工作方式是使用127.0.0.1的Ajax()调用,尽管当我在本地计算机上运行容器时,这确实可行。

我在检查窗口中看到的错误是 ERR_CONNECTION_REFUSED

GCP实例hosts.conf 包含一行127.0.0.1 localhost

我在here上尝试过GCP VM实例,结果相同,

    iptables -A INPUT -i docker0 -j ACCEPT

我还尝试(从here起)将Docker运行网络更改为--net="host",结果是相同的。

我还尝试将--add-host localhost:127.0.0.1添加到Docker run命令中,结果相同。

我认为问题在于将GCP配置为知道如何将请求路由到127.0.0.1,但是我不知道该在哪里检查,配置它,这超出了我已经完成的工作。

1 个答案:

答案 0 :(得分:0)

我无法具体解决自己遇到的问题,但是我尝试使用另一种方法来处理AjaxDataSource()的URL,并且该方法有效,我认为是一种更好的方法...

我使用了Flask url_for()函数来创建指向AjaxDataSource()所需的路由的链接,并且该链接有效。生成的链接看起来像

    /land/tmidemo/data_rate/ResultBaseKeysV1

即没有http://127.0.0.1,这似乎在我的开发环境和GCP的所有情况下都有效。

我想我很久以前就尝试过,但是没有用,因为我到处都使用了“ flask” URL,但是由于某种原因,我认为我需要“ http://127.0.0.1”作为Ajax的东西。它的作品现在...继续前进!