记一次docker端口映射“失效”bug的解决|青训营笔记

369 阅读1分钟

我们都知道docker是一个深受大家喜爱的打包、分发、部署的工具,它与传统的虚拟机相比具有轻量、性能好、稳定等多个优点。在第一次尝试制作自己的镜像时,我尝试使用了一个极其简单的flask项目,它仅有以下几行代码:

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'


if __name__ == '__main__':
    app.run(port=5000)

Python在项目根目录下编写Dockerfile:

FROM python:3.8-slim-buster
WORKDIR /app
COPY . .
RUN pip install flask
CMD ["python", "app.py"]

Docker之后成功运行打包命令:

docker build -t build-test .

Bash运行容器:

docker run -p 5001:5000 -d build-test

OK 👍,到这里一切顺利。正当我打开本地主机访问http://localhost:5001端口时,却显示无法连接到服务器,这是为什么呢。我在开始一直认为是端口映射失败造成的,但在网上查阅了大量资料后发现其实是容器内运行的IP地址是默认的127.0.0.1,这是一个回环地址,只有自己可以访问,宿主机也无法访问。因此我们需要将代码中的app.run(port=5000)更改为app.run(host=’0.0.0.0’, port=5000) 后重新打包运行,这样本机浏览器重新访问5001端口就可以正常看到‘Hello World’