docker - 运行 docker 容器时无法访问页面

标签 docker dockerfile port

我的目标是通过 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/ ,浏览器返回我:

This site can’t be reached


据我了解,在运行 -p 5000:2000 时, 5000 是主机端口,2000 是容器端口。
和命令EXPOSEDockerfile正在暴露容器港口。
为什么我会收到 This site can’t be reached当我正确暴露容器端口并将其与主机端口 5000 绑定(bind)时?

最佳答案

因为您的应用程序在端口 5000 上运行app.run(debug=True, host="0.0.0.0", port=5000)所以你应该像这样将该端口映射到你的外部端口

docker run -p 5000:5000 flask:v1

As I understood, when running -p 5000:2000, 5000 is host port and 2000 is container port. And command EXPOSE in Dockerfile is exposing container port.


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

关于docker - 运行 docker 容器时无法访问页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64607560/

相关文章:

node.js - Redis 和 docker-compose 连接 127.0.0.1 :6379

mongodb - 如何将 NodeJS 应用程序连接到在 AWS 上的 Docker 容器中运行的 MongoDB?

docker - 从 Private Docker Registry 中删除图像的方法

shell - 如何从 Docker 容器内禁用和启用互联网连接?

python-2.7 - 初始代码执行后,Docker 容器在代码 0 上退出

docker推送失败: manifest invalid

php - PHP中如何查找所有监听的端口?

docker - 如何在docker-compose中指定要启动而不启动的容器? (docker run vs docker create)

php - 是否可以在同一个 Dockerfile 中包含 PHP + MongoDb + Nginx?

java - 解析 HTML 获取网页链接,有些链接显示一个 :80 in the URL. 这是为什么?