Python GCP实例返回Ajax 127.0.0.1路由的错误连接被拒绝

Python GCP实例返回Ajax 127.0.0.1路由的错误连接被拒绝,python,docker,flask,google-cloud-platform,bokeh,Python,Docker,Flask,Google Cloud Platform,Bokeh,我有一个flask应用程序,它在Docker容器中运行,当我在本地机器上使用它时,它就会工作 但是,当我将它部署到GCP实例时,即使我可以到达服务器,我也有一些AjaxDataSource()对象无法连接 一些细节, 所有的机器,本地和gcp虚拟机都在运行Ubuntu18.04 烧瓶应用程序是这样启动的 docker run --net tminet --hostname=TEST -p 6600:6600 -v $(pwd):/app/public --name myserver --rm

我有一个flask应用程序,它在Docker容器中运行,当我在本地机器上使用它时,它就会工作

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

一些细节,

  • 所有的机器,本地和gcp虚拟机都在运行Ubuntu18.04
  • 烧瓶应用程序是这样启动的

    docker run --net tminet --hostname=TEST -p 6600:6600 -v $(pwd):/app/public --name myserver --rm myserver
    
    app.run(host=“0.0.0.0”,port=6600,debug=False)

  • Ajax路线如下所示

    docker run --net tminet --hostname=TEST -p 6600:6600 -v $(pwd):/app/public --name myserver --rm myserver
    
    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()调用指向flask应用程序,而不是另一个(bokeh)服务器

有很多有效的方法

  • 能够使用GCP外部ip地址并访问服务器
  • 从一个网页转到另一个网页是可行的,所以flask路由是可行的
不起作用的是使用
127.0.0.1
的Ajax()调用,尽管当我在本地机器上运行容器时,它确实起作用

我在inspect窗口中看到的错误是错误连接被拒绝

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

我在GCP VM实例上尝试了(从),结果相同

    iptables -A INPUT -i docker0 -j ACCEPT
我还尝试(从)将Docker运行网络更改为
--net=“host”
,结果相同

我还尝试向Docker run命令添加
——add host localhost:127.0.0.1
,结果相同


我认为问题在于配置GCP以了解如何将请求路由到
127.0.0.1
,但除了我已经做过的工作之外,我不知道在哪里检查、配置此请求。

我无法具体解决我遇到的问题,但我尝试了另一种方法来处理
AjaxDataSource()的URL
而且它起了作用,我认为有一种更好的方法

我使用Flask
url\u for()
函数创建了一个链接,指向
AjaxDataSource()
所需的路由,这很有效。结果链接看起来像

    /land/tmidemo/data_rate/ResultBaseKeysV1
ie,无
http://127.0.0.1
,这似乎在我的开发环境和GCP的所有情况下都有效


我想我很久以前就试过了,但没有成功,因为我到处都在使用“flask”URL,但出于某种原因,我认为Ajax的东西需要“”。它的作品现在。。。。继续

启动Bokeh服务器的命令是什么?您是否使用--allow websocket origin IP_ADDRESS来白名单您访问Bokeh服务器的IP_地址?您的Ajax调用是否应该以VM的外部IP而不是本地主机为目标?@tony我没有使用Bokeh服务器。@LundinCast这可能行得通,我计划作为一个实验进行测试。使用VM的外部IP地址不是一个好主意,因为该IP地址不是静态的。使用localhost(127.0.0.1)应该适用于任何部署,在物理机器上也适用,但在GCP VM上不适用。Docker内部端口映射是动态的,但在主机上,您可以使用此方法获取所需的所有信息:1)在“Docker运行命令”中使用“”显式命名Docker容器--name=您的\u容器\u名称“”2)使用“Docker端口您的\u容器\u名称”显示端口映射