You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

docker compose配置网络后宿主机无法访问容器内3000端口服务问题求助

问题根因排查&解决方案

最高概率根因:Flask应用监听地址配置错误

90%以上这类端口映射正常但宿主机无法访问的问题,都是因为Flask默认仅监听容器内部回环地址127.0.0.1,宿主机请求无法穿透到应用层:

  • 若你是用flask run命令启动,修改${ML_ENTRYPOINT}对应的启动参数,显式指定监听地址:
    flask run --host=0.0.0.0 --port=3000
    
  • 若你是在代码中直接调用app.run()启动,修改对应代码:
    app.run(host="0.0.0.0", port=3000)
    

其他排查步骤

如果修改监听地址后仍无法访问,按以下顺序校验:

  1. 验证端口映射生效状态
    执行命令docker ps | grep app,确认输出的PORTS列显示为0.0.0.0:3000->3000/tcp, :::3000->3000/tcp,确认映射规则正确。
  2. 检查宿主机端口占用
    • Mac环境执行lsof -i tcp:3000
    • Ubuntu环境执行ss -tulpn | grep 3000
      确认没有其他进程占用宿主机的3000端口。
  3. 检查防火墙规则
    • Ubuntu环境若开启ufw防火墙,执行sudo ufw allow 3000放行端口
    • Mac环境可临时关闭系统防火墙测试,确认是否是防火墙拦截了Docker端口请求。
  4. 调整测试访问方式
    不要仅用127.0.0.1测试,依次尝试以下访问命令:
    • curl http://localhost:3000/?requestType=health-check
    • curl http://0.0.0.0:3000/?requestType=health-check
    • Mac环境额外尝试curl http://docker.for.mac.host.internal:3000/?requestType=health-check

冗余配置优化建议

你当前配置中存在两处不影响运行但可优化的点:

  • celery-worker、celery-beat服务下重复定义了volumes字段,可删除重复项
  • expose: - "3000"配置是多余的,ports字段已经完成了端口暴露和映射的功能,可移除

内容的提问来源于stack exchange,提问作者nanda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:36:05