为什么docker不在0.0.0.0上运行flask应用程序?



我正在尝试dockerize我的flask应用程序。我看到docker将在0.0.0.0上托管。但我不明白。我的dockerfile:

#!/bin/bash
FROM python:3.8
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 5000
#ENTRYPOINT [ "./main_class.py" ]
#CMD [ "flask", "run", "-h", "0.0.0.0", "-p", "5000" ]
CMD [ "python", "main_class.py", "flask", "run", "-h", "0.0.0.0", "-p", "5000" ]

当我构建它时,它构建成功。当我运行docker run -p 5000:5000 iris时,它运行成功了。上面写着Running on http://172.17.0.2:5000/ (Press CTRL+C to quit)。此外,当我在浏览器中看到172.17.0.2:5000时,它不起作用。但如果我用127.0.0.1:5000,它就能工作。我怎么带0.0.0.0:5000?在main_class.py我使用

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

当我输入docker ps

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                       NAMES
90a8a1ee3625   iris      "python main_class.p…"   23 minutes ago   Up 21 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   thirsty_lalande

我在dockerfile中做错了什么吗?

此外,当我使用ENTRYPOINT时,它显示了一个错误standard_init_linux.go:228: exec user process caused: exec format error,这就是为什么我不使用ENTRYPOINT

flask run -h 0.0.0.0将告诉您的flask进程绑定到任何本地IP地址,如评论中所述。这也将允许flask响应你的Docker端口转发(5000->5000),即回答来自Docker桥的传入流量。

在Docker级别上,您的有效端口转发是0.0.0.0:5000->5000/tcp,如Docker ps所示,因此在您的主机系统上,任何本地IP地址上的端口5000将被转发到容器的flask进程。

请注意,0.0.0.0不是一个真正的IP地址,而是一个占位符绑定到任何本地IP地址。

你可以访问你的flask应用程序在任何IP路由到你的主机系统,端口5000。

最新更新