嗨,提前致谢,我是 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!, 表示烧瓶在容器内但是,在我的本地浏览器中,该网址没有响应。
如果您查看文档,您会发现:
外部可见服务器
如果您运行服务器,您会注意到该服务器只能从您自己的计算机访问,而不能从网络中的任何其他计算机访问。这是默认设置,因为在调试模式下,应用程序的用户可以在您的计算机上执行任意 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)
| 归档时间: |
|
| 查看次数: |
1702 次 |
| 最近记录: |