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

Docker部署Flask应用后无法通过localhost访问的问题求助

Flask容器化后本地无法访问的排查与解决

我开发了一个Python Flask应用,本地运行正常,容器化后用Docker启动,访问http://localhost:5000/时提示:

连接已重置

以下是我的配置文件与已做排查:

docker-compose配置

version: '3.8'

services:
  elasticsearch:
    container_name: elasticsearch
    image: elasticsearch:8.15.2
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
    healthcheck:
      test: ["CMD", "curl", "-f", "http://elasticsearch:9200"]
      interval: 30s
      timeout: 10s
      retries: 5
    networks:
      - mynetwork

  flaskapp:
    container_name: flaskapp
    build: .
    ports:
      - "5000:5000"
    depends_on:
      elasticsearch:
        condition: service_healthy
    networks:
      - mynetwork

networks:
  mynetwork:
    driver: bridge

Dockerfile配置

FROM python:3.12

WORKDIR /IoT

COPY Pipfile Pipfile.lock /IoT/

RUN pip install pipenv && pipenv install --deploy --ignore-pipfile

COPY . /IoT/

EXPOSE 5000

CMD ["pipenv", "run", "python", "app.py"]

启动命令:

docker-compose up -d

核心Python代码

# app/__init__.py

from flask import Flask
from .routes import main_blueprint
from elasticsearch import Elasticsearch

def create_app():
    app = Flask(__name__)
    app.elasticsearch = Elasticsearch(["http://elasticsearch:9200"])
    app.register_blueprint(main_blueprint)
    return app

# app.py

from app import create_app

app = create_app()

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

已做排查

  • 容器内部访问http://localhost:5000可正常返回模板,确认应用在容器内运行正常
  • 尝试通过容器IP访问(命令:docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" flaskapp),仍无法访问
  • 容器日志显示应用已正确绑定0.0.0.0:5000:
* Serving Flask app 'app'
2024-10-06T13:42:40.797064320Z  * Debug mode: off
2024-10-06T13:42:40.798759487Z WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
2024-10-06T13:42:40.798818089Z  * Running on all addresses (0.0.0.0)
2024-10-06T13:42:40.798832090Z  * Running on http://127.0.0.1:5000
2024-10-06T13:42:40.798841090Z  * Running on http://x.x.x.x:5000
2024-10-06T13:42:40.798850190Z Press CTRL+C to quit

解决方向

  • 检查端口占用:用lsof -i :5000(Linux/macOS)或netstat -ano | findstr :5000(Windows)确认本地5000端口是否被其他程序占用,若占用则更换映射端口
  • 排查防火墙拦截:临时关闭本地防火墙或安全软件,测试是否能正常访问
  • 调整Docker网络模式:Linux/macOS环境下可尝试将flask服务改为host网络模式,修改docker-compose配置:
    flaskapp:
      ...
      network_mode: host
      # 注释原ports和networks配置
      # ports:
      #   - "5000:5000"
      # networks:
      #   - mynetwork
    
  • 排除虚拟环境问题:替换Pipenv为直接pip安装,修改Dockerfile:
    FROM python:3.12
    
    WORKDIR /IoT
    
    COPY requirements.txt .
    RUN pip install -r requirements.txt
    
    COPY . /IoT/
    
    EXPOSE 5000
    
    CMD ["python", "app.py"]
    
  • 验证端口映射状态:执行docker-compose ps查看flaskapp的端口映射是否显示为0.0.0.0:5000->5000/tcp,若异常则重启容器或重新构建镜像

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 13:36:11