python - python从容器重定向到容器
问题描述
我使用 docker-compose 版本 1.25.0 ,我有 2 个容器
api - 带有 python 脚本和烧瓶
apache - 一些 gui
我希望当我收到对 api 的 curl 请求时,/test
它会在内部重定向到 apache 容器 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)
它可以工作,但我希望重定向在容器之间内部,重定向不能以这种方式工作。
我试图apach:4822/#/myapp
从 api 容器卷曲,我确实看到它通过了 apach 容器,但是使用我的 python 代码它没有,我得到代码 302 并且页面不存在。
我怎样才能让它工作?谢谢。
解决方案
之所以redirect('apach:4822/#/myapp', code=302)
不起作用,是因为该名称apach
只能在 docker-compose 设置的 docker 网络内解析。
Flask 正在向您的浏览器发送带有Location标头的 HTTP 302 代码。apach:4822/#/myapp
从运行浏览器的机器上,apach
无法解决。因此,您只需要使用外部可解析的 IP。
由于您有多个要向外部世界公开的服务,因此您应该考虑设置像nginx这样的反向代理服务器。您可以nginx
作为容器本身运行。您可以使用 nginx 在不同的路由上公开您的服务。例如,您的api
服务可以在/api/
路径中公开,您的apach
容器可以在/myapp
路径中公开。用户将连接到 nginx 服务器,并且 nginx 将根据请求的 URL 将请求路由到适当的后端服务。当用户连接到 时/api/test
,您可以重定向到/myapp
with redirect('/myapp', code=302)
。然后,nginx 会将请求路由到apach
服务。