我正在使用docker-compose版本1.25.0,我有2个容器
api-使用python脚本和flask
apach-一些gui
我想在收到对api /test
的curl请求时将其重定向到apach容器gui内部,
这是api容器中的python代码:
@app.route('/test')
def test():
return redirect('apach:4822/#/myapp', code=302)
如果我在主机外部使用此代码
return redirect('10.X.X.X:4822/#/myapp', code=302)
可以正常工作,但我希望重定向在容器之间进行内部,则重定向无法以这种方式工作。我试图从api容器 curl 到
apach:4822/#/myapp
,我确实看到它通过了到apach容器,但是用我的python代码没有,我得到了代码302,页面不存在。
我该如何运作?
谢谢。
最佳答案
redirect('apach:4822/#/myapp', code=302)
不起作用的原因是,名称apach
仅在docker-compose设置的docker网络内部可解析。
Flask正在将Location header 设置为apach:4822/#/myapp
的HTTP 302代码发送到您的浏览器。在运行您的浏览器的计算机上,无法解析apach
。因此,您只需要使用一个外部可解析的IP。
由于您要向外界公开多种服务,因此您应该考虑设置一个反向代理服务器,例如nginx。您可以将nginx
作为容器本身运行。您可以使用nginx在不同的路由上公开您的服务。例如,您的api
服务可以在/api/
路径中公开,而您的apach
容器可以在/myapp
路径中公开。用户将连接到nginx服务器,并且nginx将根据请求的URL将请求路由到适当的后端服务。当用户连接到/api/test
时,您可以使用/myapp
重定向到redirect('/myapp', code=302)
。然后,nginx会将请求路由到apach
服务。