【问题标题】:python redirect from container to containerpython从容器重定向到容器
【发布时间】:2020-01-19 13:51:18
【问题描述】:

我使用 docker-compose 1.25.0 版,我有 2 个容器

api - 带有 python 脚本和烧瓶

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 并且页面不存在。

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

【问题讨论】:

    标签: python python-3.x docker docker-compose


    【解决方案1】:

    redirect('apach:4822/#/myapp', code=302) 不起作用的原因是因为名称 apach 只能在 docker-compose 设置的 docker 网络内解析。

    Flask 正在将带有 Location 标头设置为 apach:4822/#/myapp 的 HTTP 302 代码发送到您的浏览器。在运行浏览器的机器上,apach 无法解析。因此,您只需使用外部可解析的 IP。

    由于您想要向外部世界公开多个服务,因此您应该考虑设置一个反向代理服务器,例如 nginx。您可以将nginx 作为容器本身运行。您可以使用 nginx 在不同的路由上公开您的服务。例如,您的api 服务可以在/api/ 路径公开,您的apach 容器可以在/myapp 路径公开。用户将连接到 nginx 服务器,并且 nginx 将根据请求的 URL 将请求路由到适当的后端服务。当用户连接到/api/test 时,您可以使用redirect('/myapp', code=302) 重定向到/myapp。然后 nginx 会将请求路由到apach 服务。

    【讨论】:

    • 没有办法在容器之间重定向?我明白为什么它不起作用,但我确实需要一种让它起作用的方法。
    • 代替重定向,也许您可​​以从您的 api 容器向 apach 容器发出请求并转发响应?
    • 没有任何响应,它应该显示通过 broser 发送 /test 到 apache 容器 gui 的人。
    • 好吧,如果无法访问该位置,则无法进行重定向。您可以做的是设置一个像 nginx 这样的反向代理服务器,并将您的服务放在代理后面的不同路径上。用户将通过反向代理服务器连接到您的服务。然后您可以在您的烧瓶应用程序中执行redirect('/myapp', code=302),反向代理将负责处理来自您的apach 容器的请求。
    • 嘿,谢谢你,我将 nginx 容器作为反向代理,它可以工作
    猜你喜欢
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 2020-12-10
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    相关资源
    最近更新 更多