python - GCP 实例为 Ajax 127.0.0.1 路由返回 ERR_CONNECTION_REFUSED
问题描述
我有一个使用散景的烧瓶应用程序,它在 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 地址并访问服务器
- 从网页到网页的工作,所以烧瓶路由工作
不起作用的是使用 的 Ajax() 调用,127.0.0.1
尽管当我在本地机器上运行容器时这确实有效。
我在检查窗口中看到的错误是ERR_CONNECTION_REFUSED
GCP 实例hosts.conf
确实包含一行127.0.0.1 localhost
我在 GCP VM 实例上尝试(从这里),结果相同,
iptables -A INPUT -i docker0 -j ACCEPT
我还尝试(从这里)将 Docker 运行网络更改为--net="host"
,结果是相同的。
我还尝试添加--add-host localhost:127.0.0.1
到 Docker 运行命令,结果相同。
我认为问题在于将 GCP 配置为知道如何将请求路由到127.0.0.1
,但我不知道在哪里检查、配置它,超出了我已经完成的操作。
解决方案
我无法具体解决我遇到的问题,但我尝试了一种不同的 URL 方法AjaxDataSource()
,它有效,我认为更好的方法......
我使用 Flaskurl_for()
函数创建了一个指向需要的路径的链接,AjaxDataSource()
这有效。生成的链接看起来像,
/land/tmidemo/data_rate/ResultBaseKeysV1
即,不http://127.0.0.1
,这似乎适用于所有情况,我的开发环境和 GCP。
我想我很久以前就试过了,但没有成功,因为我到处都使用“flask”URL,但出于某种原因,我认为我需要“ http://127.0.0.1 ”来处理 Ajax 的东西。它现在的作品....继续前进!
推荐阅读
- sql-server - 复制和保存文件/图像
- java - 哪种授权方法会更好,为什么?
- spring-boot - Kafka Flux 在 Rest Controller 中不起作用
- android - Android Studio:无法在设计视图中看到组件
- wordpress - Woocommerce 从 WP_Query 循环中删除隐藏的产品
- css - 如何在 sass 中动态更改 mixin 函数中的变量?
- php - 从可用于将特定数据插入数据库的选项列表中设置一个选项
- r - ggplot 金字塔只是半个金字塔
- angular - 错误 错误:尝试比较 '[{"opened":"2", "closed":"2", "assigned":"2", "reopen":"1" }]' 时出错。只允许使用数组和可迭代对象
- css - 为什么我的列未对齐?