无法通过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',说明配置未生效,按以下步骤排查:
检查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)缺少实例初始化或实例名错误,会导致启动配置失效。
排查环境变量覆盖
查看容器内是否存在FLASK_RUN_HOST环境变量覆盖代码配置:docker exec -it python-backend env | grep FLASK如果输出
FLASK_RUN_HOST=127.0.0.1,需删除该环境变量,或在代码中明确指定host优先级。验证容器内端口监听
进入容器查看端口绑定情况:docker exec -it python-backend netstat -tulpn若显示
127.0.0.1:5000而非0.0.0.0:5000,回到代码确认启动逻辑。重新构建镜像
修改代码后若未重新构建,容器会运行旧代码,执行以下命令更新:docker-compose down docker-compose build --no-cache docker-compose up -d
内容的提问来源于stack exchange,提问作者hardy6413
相关产品推荐
相关产品推荐

