python - GCP 实例为 Ajax 127.0.0.1 路由返回 ERR_CONNECTION_REFUSED

标签 python docker flask google-cloud-platform bokeh

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

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

一些细节

  • 所有机器、本地和 gcp 虚拟机都运行 Ubuntu 18.04
  • flask应用程序是这样启动的,

    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() 调用指向 Flask 应用程序,而不是另一个( Bokeh )服务器

有很多有效的方法,

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

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

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

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

我在 GCP VM 实例上尝试(来自 here ),结果相同,

    iptables -A INPUT -i docker0 -j ACCEPT

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

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

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

最佳答案

我无法具体解决我遇到的问题,但我尝试了一种不同的方法来获取 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 内容。现在可以使用了......继续前进!

关于python - GCP 实例为 Ajax 127.0.0.1 路由返回 ERR_CONNECTION_REFUSED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55311175/

相关文章:

python - Pandas - 数据框与一系列值的合并

elasticsearch - Docker/如何确定链接?

python - Flask 模板中点符号和方括号之间的区别

python - 带有许多按钮和数据库更新的 flask

python - 使用 python xlib 全局捕获、忽略和发送键事件,识别虚假输入

Python 命名约定指南

python - 复制从抽象模型派生的类的所有字段 (Django)

Docker --mount 抛出 : executable file not found in $PATH"

docker - Docker引擎群模式|在撰写中使用 “extra_hosts”的替代方法

python - Flask @login_required 不适用于 IE 和 Safari