Python 为什么可以';我在localhost:5000中看不到我的集装箱化docker flask应用程序吗?

Python 为什么可以';我在localhost:5000中看不到我的集装箱化docker flask应用程序吗?,python,docker,flask,Python,Docker,Flask,我正在努力学习Docker容器。我在理解如何访问容器本身而不是我的机器的本地主机时遇到了一些困难。这是我的docker容器,而_循环:1.5正在运行 Name-3:~ Name$ docker run while_loop:1.5 * Serving Flask app "main" (lazy loading) * Environment: production WARNING: This is a development server. Do not use

我正在努力学习Docker容器。我在理解如何访问容器本身而不是我的机器的本地主机时遇到了一些困难。这是我的docker容器,而_循环:1.5正在运行

 Name-3:~ Name$ docker run while_loop:1.5
 * Serving Flask app "main" (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 http://0.0.0.0:5000/ (Press CTRL+C to quit)
运行
docker ps
命令以获取任何正在运行的容器信息后,它将显示正确的正在运行的容器:

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
19795c23a73d        while_loop:1.5      "/bin/sh -c 'python …"   About a minute ago   Up About a minute   5000/tcp            distracted_shamir
我的Dockerfile:

FROM ubuntu:18.04
COPY ./app /home/programs/python/

RUN apt-get update -y && \
    apt-get install -y python-pip python-dev

RUN pip install flask

WORKDIR /home/programs/python/
EXPOSE 5000
CMD python /home/programs/python/main.py
在我的本地机器上测试了simple flask应用程序后,它完全可以正常工作。不确定如何实际针对容器

main.py
如果需要:

from flask import Flask
app = Flask(__name__)


@app.route('/')
def hello():
    return "Hello World!"

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

您没有提到正在使用哪个命令运行容器。您可能需要向
docker run
命令提供标志
-p 5000:5000

Dockerfile中的
EXPOSE 5000
行实际上不会导致打开该端口:

:

EXPOSE
指令实际上并不发布端口。它作为构建映像的人员和运行容器的人员之间的一种文档类型,用于发布哪些端口。要在运行容器时实际发布端口,请使用
docker run
上的
-p
标志发布和映射一个或多个端口

有鉴于此,
docker ps
实际显示的是
5000/tcp
,这令人困惑。纠正后,您应该看到:

0.0.0.0:5000->5000/tcp
其中,前一个端口为暴露端口,后一个为容器中的端口