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

Docker部署Flask应用遇端点访问失败问题求助

问题描述

我创建了如下Docker镜像:

FROM ubuntu:20.04

WORKDIR /app

COPY . /app 

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
    apt-get install -y wget && \
    apt-get install -y libgtk2.0-dev

RUN mkdir -p ~/miniconda3

RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh && \
    bash miniconda.sh -b -p /opt/miniconda && \
    rm miniconda.sh

ENV PATH /opt/miniconda/bin:$PATH

COPY environment.yaml /app/environment.yaml

RUN conda env create -f /app/environment.yaml

CMD ["/bin/bash", "-c", "source /opt/miniconda/etc/profile.d/conda.sh && conda activate my-env && python APIWrapper.py"]

运行镜像后容器成功启动,Flask应用显示正常运行,但测试/extract端点时出现连接重置错误:

$ curl http://127.0.0.1:5000/extract?contractPath=/app/input/AWS.pdf
curl: (56) Recv failure: Connection reset by peer

已尝试端口映射和挂载文件卷,但均未解决问题。

排查与解决方案

1. 修正Flask绑定地址

Flask默认仅绑定127.0.0.1,仅容器内部可访问,外部请求会触发连接重置。需在Flask启动代码中明确绑定0.0.0.0:

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

2. 检查请求处理时的进程崩溃

连接重置常因Flask处理/extract请求时进程崩溃导致,可通过以下方式排查:

  • 查看容器日志:执行docker logs <容器ID>,检查处理请求时的报错信息(如文件缺失、依赖错误、内存溢出等)
  • 容器内本地测试:执行docker exec -it <容器ID> bash进入容器,再用curl http://127.0.0.1:5000/extract?contractPath=/app/input/AWS.pdf测试,获取具体错误输出

3. 优化Conda环境启动逻辑

当前CMD用bash子shell激活环境,可能存在环境变量传递问题,可改用直接调用conda环境的Python:

CMD ["/opt/miniconda/envs/my-env/bin/python", "APIWrapper.py"]

也可以在environment.yaml中指定环境前缀:prefix: /opt/miniconda/envs/my-env,避免手动激活环境的潜在问题。

4. 验证文件权限

确认挂载的/app/input/AWS.pdf在容器内的读取权限:

  • 进入容器执行ls -l /app/input/AWS.pdf查看权限
  • 若权限不足,可在Dockerfile中添加:RUN chmod -R 755 /app/input(按需调整权限)

5. 确认端口映射正确性

再次验证容器启动命令的端口映射是否正确,确保本地端口与容器端口对应且未被占用:

docker run -p 5000:5000 -v /本地输入路径:/app/input <镜像名>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:08:17