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

基于Ubuntu镜像的Flask Docker容器断点调试问题求助

解决Docker中Flask应用的断点调试问题

你当前的Dockerfile存在几个核心问题,直接导致调试失败:

  • 激活虚拟环境前未创建venv,./venv/bin/activate不存在,这一步实际执行失败,依赖可能没安装到虚拟环境中
  • debugpy默认只监听localhost,容器外部无法连接调试端口
  • 未配置debugpy接管应用启动,也没暴露调试端口

以下是修改后的完整Dockerfile及分步说明:

FROM ubuntu:24.04

# Install required packages and Python
RUN apt-get update && \
    apt-get install -y python3 python3-pip python3-venv default-libmysqlclient-dev build-essential pkg-config curl && \
    rm -rf /var/lib/apt/lists/*

# Prevents Python from writing pyc files.
ENV PYTHONDONTWRITEBYTECODE=1

# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1

# 先创建虚拟环境,再激活并安装依赖
RUN --mount=type=cache,target=/root/.cache/pip \
   --mount=type=bind,source=requirements.txt,target=requirements.txt \
    python3 -m venv venv && \
    . ./venv/bin/activate && \
    python3 -m pip install --upgrade pip && \
    pip3 install -r requirements.txt && \
    pip3 install debugpy

COPY . .

# 暴露Flask服务端口和debugpy调试端口
EXPOSE 5000 5678

# 用debugpy启动应用,监听所有网卡的5678端口,启动时等待调试客户端连接
CMD ["./venv/bin/python", "-m", "debugpy", "--listen", "0.0.0.0:5678", "--wait-for-client", "app.py"]

关键改动说明:

  1. 修复虚拟环境流程:添加python3 -m venv venv命令,确保激活前venv已创建
  2. debugpy网络配置:
    • --listen 0.0.0.0:5678:让debugpy监听容器所有网卡,允许外部IDE连接
    • --wait-for-client:启动时暂停,等待调试客户端连接,避免应用直接运行错过断点
  3. 端口暴露:在EXPOSE中加入5678,配合容器启动时的端口映射使用

容器运行命令:

必须映射调试端口,否则IDE无法连接:

docker run -p 5000:5000 -p 5678:5678 your-image-name

VS Code调试配置示例:

在项目.vscode/launch.json中添加以下配置:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Docker Flask Debug",
            "type": "python",
            "request": "attach",
            "connect": {
                "host": "localhost",
                "port": 5678
            },
            "pathMappings": [
                {
                    "localRoot": "${workspaceFolder}",
                    "remoteRoot": "/"
                }
            ]
        }
    ]
}

调试步骤:

  1. 构建修改后的镜像:docker build -t your-image-name .
  2. 运行带端口映射的容器
  3. 在VS Code中启动上述调试配置
  4. 在Flask代码中设置断点,发送API请求即可触发断点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:27:46