简单的烧瓶服务不在 docker 容器外响应

dar*_*rll 4 flask docker

嗨,提前致谢,我是 docker 新手,我被困在一个简单的 docker 示例上,该示例在容器外公开了一个烧瓶服务。

我有一个名为rest_exampledockerfile 和 .py 文件的文件夹。这是我的 dockerfile:

FROM ubuntu:16.04
LABEL maintainer="Lorem Ipsum"
RUN apt-get update  &&  \
    apt-get install -y python  && \
    apt-get install -y python-pip  && \
    pip install Flask  && \
    apt-get install -y curl  && \
    mkdir files
COPY flask_example.py /files
ENV FLASK_APP /files/flask_example.py
EXPOSE 5000
CMD flask run
Run Code Online (Sandbox Code Playgroud)

这是flask_example.py:

from flask import Flask

app = Flask(__name__)

@app.route("/hello")
def hello():
    return "Hello World!"
Run Code Online (Sandbox Code Playgroud)

我正在创建这样的图像: docker run rest_example -t -p 5000:5000 --name=rest_example --rm

当我curl localhost:5000/hello在容器内点击时,这是响应: Hello World!, 表示烧瓶在容器内但是,在我的本地浏览器中,该网址没有响应。

bgs*_*gse 5

如果您查看文档,您会发现:

外部可见服务器

如果您运行服务器,您会注意到该服务器只能从您自己的计算机访问,而不能从网络中的任何其他计算机访问。这是默认设置,因为在调试模式下,应用程序的用户可以在您的计算机上执行任意 Python 代码。

如果您禁用了调试器或信任您网络上的用户,则只需在命令行中添加 --host=0.0.0.0 即可使服务器公开可用:

烧瓶运行 --host=0.0.0.0

这会告诉您的操作系统侦听所有公共 IP。

您在启动容器时确实发布了端口 5000,但没有指示 Flask 实际侦听“外部”接口。

您确实正确启动了容器以将容器的“外部”链接到您的本地机器,但是那里没有任何内容。

像这样尝试您的 dockerfile,添加上面显示的文档中提到的参数:

FROM ubuntu:16.04
LABEL maintainer="Lorem Ipsum"
RUN apt-get update  &&  \
    apt-get install -y python  && \
    apt-get install -y python-pip  && \
    pip install Flask  && \
    apt-get install -y curl  && \
    mkdir files
COPY flask_example.py /files
ENV FLASK_APP /files/flask_example.py
EXPOSE 5000
CMD flask run --host=0.0.0.0
Run Code Online (Sandbox Code Playgroud)