【问题标题】:"Connection was reset" error on flask server烧瓶服务器上的“连接已重置”错误
【发布时间】:2017-01-02 14:09:10
【问题描述】:

我遇到了 docker 问题,我按照官方 docker 教程部署了一个 Web 应用程序(幸运的是,一个 python/flask 应用程序)但是当我尝试部署我的应用程序时,当我来到连接部分时它失败并回复“连接已重置”

代码


    import json
    import threading
    import thread
    import io

    from flask import Flask, render_template, request
    from flask_socketio import SocketIO

    # Global variables
    app = Flask(__name__)

    lock = threading.Semaphore(0)
    IOCReplay.lock = lock

    async_mode = None
    socketio = SocketIO(app)
    IOCReplay.socketio = socketio


    @app.route("/")
    def root():
        return render_template('index.html')

    @app.route("/dependencies")
    def getDependencies():
        data = ''
        with open('./dependencies.json') as data_file:
            data = json.load(data_file)

        return json.dumps(data)

    if __name__ == "__main__":
        socketio.run(app, port=5000)
    docker run -d -P guitest:1
    6d95689601b8(...)

    docker ps
    CONTAINER ID        IMAGE               COMMAND              
    6d95689601b8        guitest:1           "python test.py"   

    CREATED             STATUS              PORTS                       NAMES
    4 seconds ago       Up 2 seconds        0.0.0.0:32771->5000/tcp     loving_boyd

Dockerfile 没问题。

问题

所以当我登录 0.0.0.0:32771 时,它会显示“连接已重置”

我从 docker FAQ 中看到,要纠正这个问题,我必须“更改 [my] localhost 上的服务配置,以便该服务接受来自所有 IP 的请求”

【问题讨论】:

  • 我不是 Mac 用户,但是我们中的一些学生在使用 OS X 时遇到了类似的问题,因为他们使用 docker-machine 来运行应用程序。因此,他们必须使用 docker 机器的 ip 地址来访问应用程序,而不是像 Linux 机器上通常使用的“localhost”,或者如果您安装了本机 docker 客户端。
  • 感谢n2o的回复!所以你认为我应该运行一个 docker-machine 而不是常规的 docker 东西,这样我就可以将我的 web 应用程序链接到一个 IP 地址,这样我就可以避免 VM 和主机之间所有 localhost 可能的冲突?
  • 不,docker-machine 解决方案相当陈旧,是一种解决方法。使用本机 docker 客户端应该是可行的方法(我认为是“Docker for Mac”)。我不知道您安装了什么,这只是您的问题可能导致的建议。
  • 你的烧瓶容器里有输出吗?有哪些错误?您可以使用docker logs <container-id> 或连接到您的容器并查找日志文件。
  • 我更新了线程,以便向您展示它会更有用,但问题(或部分问题)来自 socketio.run(app, port) 的不完整或错误参数,所以我添加了socketio.run(app, host='0.0.0.0', port) 但我还删除了 python 使用的所有奇怪的导入,如线程、json。我将尝试逐步添加其他功能,并感谢您提供 docker 日志和一些有关 docker-machine 的信息,这对我来说应该是下一步:p

标签: python docker flask


【解决方案1】:

好的,我已经解决了我所有的问题!感谢@n2o

问题是 socketio.run(app) 的参数不正确

上一个:

    from flask import Flask, render_template, request
    from flask_socketio import SocketIO

    # Code here #

    if __name__ == "__main__":
        socketio.run(app, port=5000)

固定:

    import os
    from flask import Flask, render_template, request
    from flask_socketio import SocketIO

    # code here #

    if __name__ == "__main__":
        port = int(os.environ.get('PORT', 5000))
        socketio.run(app, host='0.0.0.0', port=port)

【讨论】:

  • 请将您自己的答案标记为正确,您不需要将其添加到您的标题中;-)
  • 好的,但它说我必须再等 24 小时 :-(
  • 啊好吧,没想到 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多