无法在本地运行Docker容器

这是我的Dockerfile:

FROM alpine:3.5 RUN apk add --no-cache python3 && \ python3 -m ensurepip && \ rm -r /usr/lib/python*/ensurepip && \ pip3 install --upgrade pip setuptools && \ rm -r /root/.cache # Copy files COPY ./requirements.txt /app/requirements.txt COPY ./main.py /app/main.py # Install deps RUN pip install --upgrade pip RUN pip install --requirement /app/requirements.txt # Set the default directory where CMD will execute WORKDIR /app EXPOSE 5000 CMD [ "python3", "-u", "./main.py" ] 

和我的main.py文件:from flask im

 port Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run() 

在构build标签并通过docker run <tag> ,获取日志,说明服务器已成功启动:

 $ docker run test:latest * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 

但是我无法在浏览器中find服务器。

我以为这个问题可能在端口映射,所以我运行这样的容器:

 $ docker run -p 5000:5000 test:latest * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 

还没有骰子。 我可以在容器外部运行服务器,只需运行python3 main.py 。 我究竟做错了什么?

该脚本正在监听容器中的127.0.0.1,使其无法从主机访问。 它必须听取0.0.0.0。

您看到的127.0.0.1地址是容器联网的本地主机,即与主要主机不同。 在公开端口时,docker将容器内部IP(172.17 ….)中的端口绑定映射到主机接口中的端口。

所以你必须告诉烧瓶听所有的接口:

 app.run(host='0.0.0.0')