首页 > 解决方案 > 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 并且页面不存在。

我怎样才能让它工作?谢谢。

标签: pythonpython-3.xdockerdocker-compose

解决方案


之所以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,您可以重定向到/myappwith redirect('/myapp', code=302)。然后,nginx 会将请求路由到apach服务。


推荐阅读