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

无法通过Docker Compose访问Flask应用问题求助

无法访问Docker容器内的Flask应用

问题概述

应用启动无报错,但通过Postman访问http://127.0.0.1:5000/时提示socket hang up错误,无法正常访问容器内的Flask服务。

相关配置与代码

Flask应用代码

@app.route('/')
def home():
    return "test"

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

Dockerfile配置

# 拉取Python基础镜像
FROM python:3.8

WORKDIR /app
# 复制依赖清单到镜像内
COPY requirements.txt .

# 安装依赖
RUN pip install -r requirements.txt

# 复制本地代码到镜像内
COPY . /app

# 启动命令
CMD [ "python", "app.py" ]

Docker Compose配置

version: '3'
services:
  python-backend:
    build: ./LAB3
    container_name: python-backend
    ports:
      - "5000:5000"

文件夹结构

  • labDocker(存放Docker Compose文件)
    • LAB3(存放Dockerfile及Flask代码)

应用启动日志

WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.

 * Running on http://127.0.0.1:5000

Press CTRL+C to quit

 * Serving Flask app 'app' (lazy loading)

 * Environment: production

   WARNING: This is a development server. Do not use it in a production deployment.

   Use a production WSGI server instead.

 * Debug mode: off

Postman请求错误信息

GET http://127.0.0.1:5000/
Error: socket hang up
Request Headers
User-Agent: PostmanRuntime/7.31.3
Accept: */*
Postman-Token: e54441e3-9ec4-427c-8202-e09f5cd92500
Host: 127.0.0.1:5000
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

Docker容器状态(docker ps -a输出)

CONTAINER ID   IMAGE                              COMMAND                  CREATED          STATUS                     PORTS                    NAMES
ae6ad71c8542   labdocker_python-backend           "python app.py"          15 minutes ago   Up 15 minutes              0.0.0.0:5000->5000/tcp   python-backend

解决方案

从启动日志能看到,Flask实际运行在127.0.0.1:5000,但代码里明明指定了host='0.0.0.0',说明配置未生效,按以下步骤排查:

  1. 检查Flask实例初始化
    确认代码中正确创建了Flask实例,例如:

    from flask import Flask
    app = Flask(__name__)  # 这一行必须存在
    
    @app.route('/')
    def home():
        return "test"
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000)
    

    缺少实例初始化或实例名错误,会导致启动配置失效。

  2. 排查环境变量覆盖
    查看容器内是否存在FLASK_RUN_HOST环境变量覆盖代码配置:

    docker exec -it python-backend env | grep FLASK
    

    如果输出FLASK_RUN_HOST=127.0.0.1,需删除该环境变量,或在代码中明确指定host优先级。

  3. 验证容器内端口监听
    进入容器查看端口绑定情况:

    docker exec -it python-backend netstat -tulpn
    

    若显示127.0.0.1:5000而非0.0.0.0:5000,回到代码确认启动逻辑。

  4. 重新构建镜像
    修改代码后若未重新构建,容器会运行旧代码,执行以下命令更新:

    docker-compose down
    docker-compose build --no-cache
    docker-compose up -d
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:45:27