我正在使用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服务。

09-11 19:53