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

Docker化Flask服务无法外部访问端点问题求助

Docker容器中Flask+Gunicorn应用外部无法访问排查方案

问题背景

我用Docker部署了基于Gunicorn的Flask应用,相关配置及当前状态如下:

Dockerfile

FROM python:3.11-slim

WORKDIR /app

RUN apt-get update && apt-get install -y \
    libmagic1 \
    curl \
    && rm -rf /var/lib/apt/lists/*

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

ENV PYTHONUNBUFFERED=1

CMD [ "gunicorn", "--workers", "2", "--threads", "2", "-b", "0.0.0.0:5000", "--timeout", "1000", "app:app"]

docker-compose.yml

services:
  flask-api:
    build: .
    ports:
      - "0.0.0.0:5000:5000"
    volumes:
      - .env:/app/.env:ro

应用代码(app.py)

from flask import Flask
app = Flask(__name__)
CORS(app)

@app.route("/")
def index():
    return "Hello from the endpoint!"
  • 容器内部通过docker exec -it flask_server_flask-api_1 curl http://127.0.0.1:5000/可正常返回Hello from the endpoint!
  • 容器外部执行curl http://127.0.0.1:5000返回curl: (56) Recv failure: Connection reset by peer
  • 已规避绑定localhost/127.0.0.1的常见问题,但问题仍存在

排查步骤及解决方案

1. 确认容器内部监听状态

先检查Gunicorn是否真的在0.0.0.0:5000端口监听:

docker exec flask_server_flask-api_1 netstat -tulpn

如果输出无0.0.0.0:5000的监听记录:

  • 验证app:app的正确性:确保app.py在容器工作目录/app下,且Flask实例名称确实为app
  • 查看容器启动日志排查Gunicorn启动异常:
docker logs flask_server_flask-api_1

根据日志提示修复依赖缺失、模块找不到等问题。

2. 验证宿主机端口映射状态

检查宿主机是否正常监听5000端口:

netstat -tulpn | grep 5000

如果宿主机无对应监听:

  • 检查端口是否被其他进程占用:
lsof -i :5000

停止占用进程或修改docker-compose.yml中的映射端口

  • 重建容器服务:
docker-compose down && docker-compose up --build -d

3. 检查防火墙/安全组规则

  • 宿主机防火墙开放5000端口:
    • ufw:ufw allow 5000/tcp
    • firewalld:firewall-cmd --add-port=5000/tcp --permanent && firewall-cmd --reload
  • 云服务器需同步配置平台安全组的5000端口入站规则

4. 排除CORS扩展干扰

临时注释app.py中的CORS(app)代码,重启容器后测试外部访问,排除CORS扩展导致的连接异常。

5. 测试Docker网络模式

切换至host网络模式排查(仅用于测试,生产环境不推荐):
修改docker-compose.yml:

services:
  flask-api:
    build: .
    network_mode: host
    volumes:
      - .env:/app/.env:ro

重启服务后访问http://127.0.0.1:5000,若能正常访问则说明bridge网络转发存在问题,可尝试重启Docker服务:

systemctl restart docker

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:33:29