我的目标是通过 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 是容器端口。和命令
EXPOSE
在 Dockerfile
正在暴露容器港口。为什么我会收到
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/