我正在尝试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。