Docker Compose部署Flask API无法外部访问问题求助
解决Docker Compose部署Flask API公网无法访问的问题
以下是针对该问题的排查和解决步骤:
确认Flask启动命令是否正确生效
必须明确指定Flask监听所有网卡,启动命令需包含--host=0.0.0.0参数,示例:flask run --host=0.0.0.0 --port=5000若直接运行脚本,需确保代码里写死监听配置:
if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)很多情况是代码里配置了但启动命令没带参数,导致Flask默认只监听容器内的
127.0.0.1,仅容器内部可访问。检查Docker Compose端口映射配置
确保docker-compose.yml里的端口映射绑定到VM的所有网卡,而非仅本地回环地址,正确配置示例:services: flask-api: build: . ports: - "0.0.0.0:5000:5000"若写成
127.0.0.1:5000:5000,端口只会绑定到VM的本地回环,公网无法访问。验证容器内部监听状态
进入Flask容器,检查端口监听情况:docker exec -it <容器名或ID> bash # 若容器无netstat,先安装 apt update && apt install -y net-tools # 查看5000端口监听 netstat -tulpn | grep 5000输出需显示
0.0.0.0:5000或:::5000,若为127.0.0.1:5000,说明Flask未正确监听所有网卡,回到第一步修正启动命令。检查VM主机的端口绑定状态
在VM上执行命令,确认5000端口绑定到所有网卡:ss -tulpn | grep 5000若输出为
127.0.0.1:5000,说明Docker Compose端口映射配置有误,回到第二步修正。确认Flask路由配置
检查访问的路径是否正确,比如若接口路由是/api,公网访问需用http://123.43.210.230:5000/api,而非根路径/。
内容的提问来源于stack exchange,提问作者cd91
相关产品推荐
相关产品推荐

