【问题标题】:Cannot reach page when running docker container运行 docker 容器时无法访问页面
【发布时间】:2020-10-30 11:32:40
【问题描述】:

我的目标是通过 Dockerfile 创建映像,然后从该映像运行容器。

这是 Dockerfile:

FROM python:3-alpine

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

EXPOSE 2000

CMD ["python", "app.py"]

这是 app.py:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"

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

我正在使用此命令构建映像:docker build -t flask:v1 .

并使用以下命令运行它:docker run -p 5000:2000 flask:v1

运行后,我在终端中得到了这个:

 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 265-965-329

当我转到http://0.0.0.0:5000/时,浏览器返回我:

无法访问此网站

据我了解,在运行-p 5000:2000 时,5000 是主机端口,2000 是容器端口。 而Dockerfile 中的命令EXPOSE 正在暴露容器端口。

当我正确暴露容器端口并将其与主机端口 5000 绑定时,为什么会得到 This site can’t be reached

【问题讨论】:

    标签: docker dockerfile port


    【解决方案1】:

    因为您的应用在端口 5000 上运行

    app.run(debug=True, host="0.0.0.0", port=5000)

    所以你应该像这样将该端口映射到你的外部端口

    docker run -p 5000:5000 flask:v1
    

    据我了解,运行 -p 5000:2000 时,5000 是主机端口,2000 是容器端口。 Dockerfile 中的命令 EXPOSE 正在暴露容器端口。

    是的,但由于您的应用程序在端口 5000 上运行,因此端口 2000 上没有运行任何内容。如果您想使用 2000 端口,您也可以在 app.run 中更改该端口

    【讨论】:

      猜你喜欢
      • 2021-12-10
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      • 2018-09-04
      • 2016-03-18
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多