【问题标题】:Flask app running in host system but not in dockerFlask 应用程序在主机系统中运行但不在 docker 中
【发布时间】:2020-07-26 13:49:18
【问题描述】:

我正在尝试在 docker 上运行一个 Flask 应用程序(它似乎在 Windows 主机系统上运行良好)。

这是我的应用程序。

from flask import Flask, request
import pickle
import numpy as np

with open("./rf.pkl", "rb") as file:
    model = pickle.load(file)

app = Flask(__name__)

@app.route("/")

def predict():
    s_length = request.args.get("s_length")
    s_width = request.args.get("s_width")
    p_length = request.args.get("p_length")
    p_width = request.args.get("p_width")
    prediction = model.predict(np.array([[s_length, s_width, p_length, p_width]]))
    return str(prediction)

if __name__ == "__main__":
    app.run(host = '0.0.0.0', port = 5000)

正如我所说,这个应用在主机上运行良好。

这是我的 Dockerfile。

FROM continuumio/anaconda3:latest

WORKDIR /home

COPY . /home

RUN pip install -r requirements.txt

EXPOSE 5000

CMD python flask_1.py

当我使用docker run -p 5000:5000 rf_api 时,它表示应用程序正在http://0.0.0.0:5000/ 上运行。但是,浏览器无法访问该页面。

我还尝试了docker inspect --format '{{ .NetworkSettings.IPAddress }}' <containerid>,它说它在 172.17.0.2 上运行。但是浏览器也无法访问这个IP。

我不知道出了什么问题。任何帮助,将不胜感激。谢谢!

这是 'docker ps' 的输出。

https://i.stack.imgur.com/h6rji.png

【问题讨论】:

  • 尝试运行docker logs -f 1a22,在尝试打开页面时查看是否有任何内容。
  • 嗨,我试过了。仍然从浏览器收到“无法访问该网站”。
  • 好的,但是日志什么也没显示?

标签: python docker flask devops


【解决方案1】:

ssh 进入容器使用:

docker exec -it <container name> /bin/bash

然后 curl localhost:5000 如果这不起作用,请检查项目日志

【讨论】:

  • 这样做会给我这个错误。 """OCI 运行时执行失败:执行失败:container_linux.go:349: 启动容器进程导致"exec:\"C:/Program Files/Git/usr/bin/bash\": stat C:/Program Files/Git /usr/bin/bash: 没有这样的文件或目录": 未知""
【解决方案2】:

尝试在浏览器中访问localhost:5000127.0.0.1:5000

在 Windows 上,运行

docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         
default   *        virtualbox   Running   tcp://192.168.33.100:2376

然后尝试在浏览器中浏览 ^^IP:5000。

【讨论】:

  • 嗨,我在 Windows 上运行它。在移至 0.0.0.0:5000 之前,我确实先尝试了这两种方法。
  • 你能提供docker ps的输出吗(仅限运行flask应用的容器)?
  • 当然!我将图像添加到原始帖子中。
  • 看起来不错...尝试运行docker run -p 9999:80 -d nginx 并查看是否可以访问其他已发布的端口。尝试访问 localhost:9999。你应该会看到 nginx 主页
  • 稍后将尝试在 Ubuntu 机器上进行。谢谢您的帮助。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 2019-05-24
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
相关资源
最近更新 更多