GCP实例为Ajax 127.0.0.1路由返回ERR_CONNECTION_REFUSED

问题描述 投票:1回答:1

我有一个使用在Docker容器中运行的bokeh的烧瓶应用程序,当我在本地机器上使用它时它可以工作。

但是,当我将它部署到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,但我不知道在哪里检查,配置这个,超出我已经做过的。

python docker flask google-cloud-platform bokeh
1个回答
0
投票

我无法专门解决我遇到的问题,但我对AjaxDataSource()的URL尝试了不同的方法,并且它有效,我认为更好的方法......

我使用Flask url_for()函数来创建AjaxDataSource()需要的路线的链接,这是有效的。结果链接看起来像,

    /land/tmidemo/data_rate/ResultBaseKeysV1

即,没有http://127.0.0.1,这似乎适用于所有情况,我的开发环境和GCP。

我想我很久以前尝试过这个并没有用,因为我在整个地方使用“烧瓶”网址,但出于某种原因,我认为我需要“http://127.0.0.1”来获取Ajax的东西。它的作品现在......继续前进!

© www.soinside.com 2019 - 2024. All rights reserved.