我有一个使用在Docker容器中运行的bokeh的烧瓶应用程序,当我在本地机器上使用它时它可以工作。
但是,当我将它部署到GCP实例时,即使我可以访问服务器,我也有一些无法连接的AjaxDataSource()对象。
一些细节,
app.run(host="0.0.0.0", port=6600, debug=False)
http://127.0.0.1:6600/land/tmidemo/data_rate?name=ResultBaseKeysV1
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 run --net tminet --hostname=TEST -p 6600:6600 -v $(pwd):/app/public --name myserver --rm myserver
有很多有用的,
什么不工作是使用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
,但我不知道在哪里检查,配置这个,超出我已经做过的。
我无法专门解决我遇到的问题,但我对AjaxDataSource()
的URL尝试了不同的方法,并且它有效,我认为更好的方法......
我使用Flask url_for()
函数来创建AjaxDataSource()
需要的路线的链接,这是有效的。结果链接看起来像,
/land/tmidemo/data_rate/ResultBaseKeysV1
即,没有http://127.0.0.1
,这似乎适用于所有情况,我的开发环境和GCP。
我想我很久以前尝试过这个并没有用,因为我在整个地方使用“烧瓶”网址,但出于某种原因,我认为我需要“http://127.0.0.1”来获取Ajax的东西。它的作品现在......继续前进!