Python GCP实例返回Ajax 127.0.0.1路由的错误连接被拒绝
我有一个flask应用程序,它在Docker容器中运行,当我在本地机器上使用它时,它就会工作 但是,当我将它部署到GCP实例时,即使我可以到达服务器,我也有一些AjaxDataSource()对象无法连接 一些细节,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
- 所有的机器,本地和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
而且它起了作用,我认为有一种更好的方法
我使用Flaskurl\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名称”显示端口映射