gpt4 book ai didi

python - 如何访问 docker 容器中的内部服务器?

转载 作者:行者123 更新时间:2023-12-02 20:48:00 25 4
gpt4 key购买 nike

因此,我正在尝试对执行以下操作的 Flask 应用程序进行 docker 化:

  • 在容器的 127.0.0.1:5006 内部运行 Bokeh Server
    地址。
  • 在地址 0.0.0.0:5000 中运行 Flask 应用程序,所以
    它可以从容器外部访问。
  • 建立连接后,Flask 会尝试从 Bokeh Server 获取数据
    (用容器实例化)。但是当作为容器运行时,它永远不会访问容器自己的本地主机(甚至没有将其设置为 --net=host)。

  • 我设法让它工作的唯一方法是 在 0.0.0.0 中创建 Bokeh 服务器以及将容器的主机 IP(我在 Windows 上)传递给 Flask 尝试从中获取它的地址(参见 autoload_server 中的 url 字段)。但这显然不适用于其他机器。

    以下是相关的代码块:
    server = Server({'/datavisualization': bokeh_app}, io_loop=io_loop, address="127.0.0.1",
    allow_websocket_origin=["*"], host=["*"])

    @app.route('/')
    def bokeh_server():
    # Fetch Running Bokeh Server
    bokeh_embed = autoload_server(model=None,
    app_path="/datavisualization",
    url="http://127.0.0.1:5006")

    html = render_template('index.html', bokeh_embed=Markup(bokeh_embed))

    return html

    if __name__ == '__main__':
    from tornado.httpserver import HTTPServer
    from tornado.wsgi import WSGIContainer
    from bokeh.util.browser import view
    # Serve the Flask app
    http_server = HTTPServer(WSGIContainer(app))
    http_server.listen(5000, address='0.0.0.0')
    io_loop.add_callback(view, "http://0.0.0.0:5000/")
    io_loop.start()

    也许对 Docker 有更多背景的人可以帮助我理解这里发生了什么?我假设从容器的角度来看,在 localhost 上发布的任何内容都可以被从同一容器内发布的其他服务看到。

    提前致谢

    最佳答案

    我将根据我的评论从我怀疑正在发生的事情中回答这个问题。

    在我对 Bokeh 和 server_document 的简短评论中(来自 https://docs.bokeh.org/en/latest/docs/user_guide/embed.html#bokeh-applications ),看起来这个函数实际上生成了一些 JavaScript。它实际上并没有从 Python 或 Flask 本身连接到 Bokeh 服务器。连接来自浏览器。

    鉴于此信息,收听 http://127.0.0.1:5006不允许浏览器连接。即使容器在 --net=host 中运行Windows 或 Mac 上的模式将使容器在 Docker 虚拟机网络而不是实际主机上监听,仍然导致连接失败。

    Bokeh 服务器需要在 0.0.0.0 上监听,以便通过 Docker NAT 的任何 IP 都能够连接。此外,您需要告诉您的浏览器如何访问此容器。这意味着使用 VM 的 IP 地址或暴露 Docker 容器端口的计算机的 IP。

    在生产环境中,您可能会在负载平衡器或其他反向代理后面运行 Flask 和 Bokeh 服务器端口,然后可以公开单个 IP/DNS 名称以连接到它们。然后您将使用该 DNS 名称或 IP 作为您的 url参数。

    关于python - 如何访问 docker 容器中的内部服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48139939/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com