【问题标题】:Flask api hosted as a docker container works with localhost:5000 but not with 172.17.0.2:5000 [duplicate]作为 docker 容器托管的 Flask api 适用于 localhost:5000 但不适用于 172.17.0.2:5000 [重复]
【发布时间】:2021-10-20 10:24:24
【问题描述】:

我创建了一个烧瓶 api 并将其作为 docker 映像托管。镜像的 dockerfile 如下所示:

FROM pymesh/pymesh:latest

WORKDIR /apiapp

RUN pip install flask

EXPOSE 5000

COPY . /apiapp
ENV FLASK_APP=feature_extract_api.py
# ENTRYPOINT ['/bin/bash']

CMD ["flask", "run", "--host", "0.0.0.0"]

原始python文件中的app.run()如下所示:

if __name__=='__main__':
    app.run()

运行 docker 容器时的终端显示如下:

(dockerenv) D:\Siemens\Docker Pymesh API>docker run -p 5000:5000 pymeshapi:trial  
 * Serving Flask app 'feature_extract_api.py' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on all addresses.
   WARNING: This is a development server. Do not use it in a production deployment.
 * Running on http://172.17.0.2:5000/ (Press CTRL+C to quit)

但是,当我转到链接 http://172.17.0.2:5000/ 时,我没有得到任何回应。但是当我跑步时 http://localhost:5000/,我得到一个有效的响应。

为什么会这样?
谢谢你

【问题讨论】:

  • 是的,虽然我没有完全理解它,但我明白了要点。谢谢

标签: python docker flask dockerfile


【解决方案1】:

由于它运行 Docker 的方式,使用桥接网络 IP 地址的“技巧”在 Windows 上不起作用。

推荐的方式是映射端口并使用localhost

【讨论】:

  • 那么由于某些 Windows 问题,我将不得不使用链接 localhost:5000 来调用 API?
  • 是的。你必须这样做。但这也是“正确”的做法,所以这不是一件坏事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 2020-09-03
  • 2012-01-01
  • 1970-01-01
相关资源
最近更新 更多