如何在PyCharm中配置debugpy附加调试本地Docker容器内代码
PyCharm 附加调试Docker内Python代码配置方案(对应VSCode Debugpy Attach模式)
基于你已有的VSCode配置,以下是PyCharm的等价配置方案,解决端口占用和.env加载问题:
一、核心配置:直接附加到容器内的Debugpy服务
这个方案和你VSCode的逻辑完全一致,无需使用远程解释器,避免卡顿和.env问题。
1. 确认容器内Debugpy状态
确保容器内的Python进程已通过Debugpy监听端口(你VSCode能正常调试说明此步骤已完成),启动命令类似:
# 以Odoo为例,在启动命令中加入Debugpy参数 python -m debugpy --listen 0.0.0.0:8888 --wait-for-client odoo-bin -c /path/to/config.conf
注意:必须监听0.0.0.0而非127.0.0.1,否则宿主无法访问容器内的Debugpy服务。
2. 创建PyCharm调试配置
- 打开PyCharm,点击右上角运行配置下拉框 → Edit Configurations...
- 点击左上角「+」,选择 Python Debug Server(PyCharm 2023+ 可选更适配的Debugpy Attach)
- 填写配置项:
- Name:自定义(如「Attach Docker Odoo」)
- Host:
localhost(若容器8888端口已映射到宿主);若用Docker内部网络,填容器IP(通过docker inspect <容器ID/名称> | grep IPAddress获取) - Port:
8888(与VSCode中debugServer参数一致) - Path Mappings:完全照搬VSCode的
pathMappings,逐条添加:本地路径(Local Path) 远程路径(Remote Path) /path/to/folder/Odoo-Dev/syscoon/agora/internal_addons/mnt/odoo/internal_addons/path/to/folder/Odoo-Dev/syscoon/agora/external_addons/mnt/odoo/external_addons/path/to/folder/Odoo-Dev/syscoon/agora//mnt/odoo/syscoon_addons/path/to/folder/Odoo-Dev/odoo-sync/addons/usr/lib/python3/dist-packages/odoo/addons/path/to/folder/Odoo-Dev/enterprise/mnt/odoo-enterprise - 勾选 Allow parallel run(避免端口占用误报,PyCharm仅连接端口而非占用)
- 关闭 Just My Code(对应VSCode的
justMyCode: false) - 可选:勾选 Log to file 保存调试日志,方便排查问题
3. 解决端口占用问题
你遇到的端口占用错误通常是以下原因:
- 宿主8888端口被其他进程占用:用
lsof -i :8888(Mac/Linux)或netstat -ano | findstr :8888(Windows)检查,杀掉占用进程,或修改容器端口映射(如容器8888→宿主8889,PyCharm配置中Port改为8889) - 误将PyCharm的调试服务端口设为8888:确保配置中是连接容器的8888端口,而非PyCharm自身监听8888
4. 加载Docker的.env文件
- 若可复制容器内的.env文件到本地:将容器内的
.env(如/mnt/odoo/.env)复制到本地项目根目录,在调试配置的Environment variables中点击「...」→ Load from file,选择本地.env文件 - 若无法复制:在Environment variables中手动添加.env内的关键变量(如ODOO_DB、ODOO_ADMIN_PASSWORD等)
二、备选:优化远程Python解释器(解决卡顿和.env问题)
若坚持使用远程解释器,可调整以下配置:
- 加速同步:打开
Settings → Project: <你的项目> → Python Interpreter,找到远程解释器配置,关闭Synchronize files automatically,改为手动同步(右键项目→Deployment → Sync with Deployed to...),仅同步必要的addons目录 - 加载.env:在远程解释器配置的Environment variables中,点击「...」→ Load from file,选择容器内的.env文件路径(如
/mnt/odoo/.env)
内容的提问来源于stack exchange,提问作者MauriceXD
相关产品推荐
相关产品推荐

