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

PyCharm中基于docker-compose的Sanic项目调试配置咨询

我太懂这种踩坑的感觉了——接手了个用Docker Compose搭的多服务项目,本地调试本来就头大,找的教程还全是给Django写的,Sanic根本套不上。别慌,下面给你两套直接能用的Run/Debug配置模板,分别适配PyCharm和VS Code,你照着改就行:

PyCharm 下的 Docker Compose + Sanic 调试配置

首先得确保你的docker-compose.yml里,Sanic服务已经挂载了本地代码目录(这样改完本地代码能实时同步到容器里),参考示例:

services:
  sanic-app:
    build: .
    volumes:
      - ./:/app  # 把本地项目根目录挂载到容器内的/app路径
    ports:
      - "8000:8000"  # Sanic服务的对外端口
    environment:
      - SANIC_DEBUG=True  # 开启Sanic的调试模式,支持代码热重载
    command: python main.py  # 替换成你的Sanic启动文件路径

接下来配置PyCharm的调试器:

  • 打开顶部菜单的Run > Edit Configurations
  • 点击左上角的+号,选择Docker Compose类型
  • 在Services列表里选中你的Sanic服务(比如上面的sanic-app)
  • 切换到Debugger标签页,找到Python配置区:
    • 设置Path mappings:把本地项目根目录映射到容器内的/app(要和volumes里的路径完全一致)
    • 选择Python interpreter:如果没自动识别,点击Configure添加容器内的Python解释器(PyCharm会自动扫描Docker Compose里的服务)
  • 保存配置后,点击调试按钮就能启动了,设置的断点会正常触发。

VS Code 下的 Docker Compose + Sanic 调试配置

第一步同样先把docker-compose.yml的挂载和基础配置弄好(参考上面的yaml示例)。

然后在项目根目录创建.vscode/launch.json文件,填入以下模板:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Docker Compose: Sanic Debug",
      "type": "python",
      "request": "attach",
      "connect": {
        "host": "localhost",
        "port": 5678  # 这个端口要和后面Sanic启动时指定的调试端口一致
      },
      "pathMappings": [
        {
          "localRoot": "${workspaceFolder}",
          "remoteRoot": "/app"  # 对应容器内的代码挂载路径
        }
      ],
      "justMyCode": false
    }
  ]
}

接下来要给Sanic服务添加调试支持:

  1. 在你的Dockerfile里安装debugpy(Python官方推荐的调试工具):
RUN pip install debugpy
  1. 修改docker-compose.yml里Sanic服务的command,加上调试参数:
command: python -m debugpy --listen 0.0.0.0:5678 --wait-for-client main.py

--wait-for-client参数会让Sanic服务等IDE连接后再启动,避免调试还没连上服务就跑起来了。

配置完成后,启动Docker Compose服务,然后在VS Code里点击调试按钮就能attach到容器里的Sanic进程,断点就能正常工作了。

关键注意事项

  • 调试端口(比如示例里的5678)不需要在docker-compose.yml里额外映射,因为Docker Compose默认的内部网络里,IDE能直接访问容器的端口
  • 一定要开启Sanic的DEBUG模式,不然代码修改后不会自动重载(调试时如果用了--wait-for-client,会等IDE连接后再启动服务)
  • 如果习惯用ptvsd代替debugpy,只需要把安装包和启动命令换成对应的即可,核心逻辑都是路径映射和端口匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:42:38