Docker 无法在浏览器(MacOS)中打开停靠的烧瓶应用程序

Docker 无法在浏览器(MacOS)中打开停靠的烧瓶应用程序,docker,flask,docker-machine,Docker,Flask,Docker Machine,我是docker和flask的新手。作为一个测试用例,我正在尝试将一个flask应用程序dockerize,该应用程序在MacOS上的浏览器中返回“hello world”。我有以下文件-app.py、requirements.txt、Dockerfile。下面给出了脚本和文件的内容 app.py: from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return "hel

我是docker和flask的新手。作为一个测试用例,我正在尝试将一个flask应用程序dockerize,该应用程序在MacOS上的浏览器中返回“hello world”。我有以下文件-app.py、requirements.txt、Dockerfile。下面给出了脚本和文件的内容

app.py:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return  "hello world!"

if __name__ == '__main__':
    app.run(debug=True)
requirements.txt

Flask==1.0.3
Dockerfile

FROM  python:3.7.2-slim

WORKDIR /app

COPY . /app

RUN pip install --no-cache-dir -r  requirementx.txt


CMD ["python", "app.py"]
我遵循了烧瓶应用程序对接的标准程序:

docker build -t flask app:latest .

docker run -d -p 5000:5000 flask app
根据之前关于StackOverflow的报道,我查看了以下链接中提供的解决方案:

这将生成以下错误消息:

curl: (52) Empty reply from server
curl: (6) Could not resolve host: app
我甚至按照建议将
app.run()
更改为
app.run(host='0.0.0')
,因为我希望容器可以从外部访问,如此链接中所述:

我运行命令:
curl-Ihttp://0.0.0.0:5000
也生成了相同的错误消息-

curl: (52) Empty reply from server
我甚至试过:
curl-H主机:0.0.0.0:5000-Ihttp://app:5000
这给了我以下错误信息:

curl: (52) Empty reply from server
curl: (6) Could not resolve host: app
Docker使用以下命令集进行了安装和测试,一切运行顺利:

$ brew install docker docker-machine
$ brew cask install virtualbox
$ docker-machine create --driver virtualbox default
$ docker-machine env default
$ eval "$(docker-machine env default)"
$ docker run hello-world

这是一个非常简单的代码。但我不知道为什么我会在这里遇到这些问题。非常感谢任何帮助。

在主机系统上运行
docker ps-a
的输出是什么?我希望(a)包括
app.run(host='0.0.0')
参数和(b)指向
docker机器ip
地址的组合能够工作。您是否尝试过此特定配对?您也可以使用Docker桌面应用程序(
brew cask安装Docker
)。您仍然需要更改
app.run()
调用,但是您应该能够访问
http://localhost:5000
从主机浏览器。2件其他事情:1)生成命令无效,语法无效(使用
docker build-t app.
)。2) 您的requirements.txt文件在Dockerfile中被称为
requirementx.txt
,因此这也不会起作用。啊,谢谢Z4层!错误在于Dockerfile中requirements.txt的拼写错误。docker build中的flask应用程序在我发布问题时是一个印刷错误。由于某种原因,即使没有名为requirementx.txt的文件,也会生成图像。