【问题标题】:Flask API run on Docker but can't accessFlask API 在 Docker 上运行但无法访问
【发布时间】:2019-11-17 20:20:04
【问题描述】:

我正在尝试使用 Docker 运行我的 API。我已经设法构建并运行它,但是当我在 Postman 中对其进行测试时,它不起作用。
我有一个文件夹,其中包含 uhopper.py(即 API)、requirements.txt 和 Dockerfile。
一切似乎都正常,但是当我在“http://127.0.0.1:5000/profile/john”上发出 GET 请求时,它没有给出响应并发生错误(“连接到 http://127.0.0.1:5000/profile/john 时出错。”)
我希望有人可以帮助我,在此先感谢!

uhopper.py

from flask import Flask, request
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

john = {
    "http://en.wikipedia.org/wiki/Category:Writers_from_Belfast": 1,
    "http://en.wikipedia.org/wiki/Category:People_educated_at_Newstead_Wood_School": 2,
}

mac = {
    "http://en.wikipedia.org/wiki/Category:1998_establishments_in_New_York": 1,
    "http://en.wikipedia.org/wiki/Category:Public_Interest_Research_Groups": 1,
}

class Profile(Resource):
    def get(self, name):
        if name == 'john':
            return john, 200
        elif name == 'mac':
            return mac, 200
        return "Not found", 400

api.add_resource(Profile, "/profile/<string:name>")

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

requirements.txt

Flask>=1.1.1
Flask-RESTful>=0.3.7

Dockerfile

FROM python:3.7

WORKDIR /uhopper
COPY . .

RUN pip install -r requirements.txt

ENTRYPOINT ["python"]
CMD ["uhopper.py"]

这是我的 Git Bash:

【问题讨论】:

    标签: api docker flask


    【解决方案1】:

    您缺少 Flask 导入:

    from flask import Flask
    

    您可以重新排序 Dockerfile 以保存复制路径:

    FROM python:3.7
    
    WORKDIR /uhopper
    COPY . .
    
    RUN pip install -r requirements.txt
    
    ENTRYPOINT ["python"]
    CMD ["uhopper.py"]
    

    我认为使用绝对路径CMD ["/uhopper/uhopper.py"]是个好习惯

    我鼓励您也指定(至少最低)导入版本:

    Flask>=1.1.1
    Flask-RESTful>=0.3.7
    

    【讨论】:

    • 我已经完成了你所说的一切,但仍然无法正常工作。 (我已经导入了 Flask,但是当我写问题时我忘了写那行,现在它已经更新了,我写了你推荐的所有内容)
    • 如果你在 Windows 上使用 Docker,我认为你不能使用 localhost (127.0.0.1) 来访问容器。你可以通过运行一个已知的工作解决方案(例如 Nginx)来证明这一点,也许是docker run --interactive --tty --publish=80:80 nginx,然后尝试curl http://localhost:80。我怀疑这对你也不起作用?
    • 不,它不起作用。 (正是我在 Windows 上)我应该怎么做才能到达容器?
    • 我不熟悉在 Windows 上运行 Docker。 docker-machine ip 是否产生 IP?如果是,请尝试该 IP 的 5000 端口。
    • 其他人回答但它已经消失了。您正在运行docker run --publish=5000:5000 ... 对吗?或许添加--interactive --tty 也可以更轻松地查看日志。
    猜你喜欢
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 2018-08-31
    相关资源
    最近更新 更多