如何使用VSCode在Docker环境下调试Ruby 2.5.0代码?
我刚好折腾过Ruby 2.5 + Docker + VSCode调试的场景,给你一步步拆解怎么实现调试器附加,亲测可行:
1. 配置Docker容器的调试依赖与端口
首先得让你的Docker容器具备调试能力,还要能和VSCode通信:
- 安装调试所需gem:在你的
Gemfile里添加适配Ruby 2.5的版本(版本不对会直接跑不起来):
然后在Dockerfile里执行group :development do gem 'ruby-debug-ide', '~> 0.7.0' gem 'debase', '~> 0.2.4.beta10' endbundle install确保安装完成。 - 暴露调试端口:在Dockerfile里加一行
EXPOSE 1234,这个是调试器默认的通信端口。 - 映射端口与挂载代码:启动容器时,一定要把本地代码目录挂载到容器内的对应路径,同时映射调试端口:
- 如果用
docker run命令:docker run -p 1234:1234 -v $(pwd):/app your-ruby-image - 如果用Docker Compose,在服务配置里加:
这里的ports: - "1234:1234" volumes: - .:/app/app是容器内的代码根目录,要和你本地VSCode的工作目录对应上。
- 如果用
2. 配置VSCode的调试启动项
打开VSCode,切换到「调试」面板,点击「创建launch.json文件」,选择Ruby环境,然后把配置改成远程附加模式:
{ "version": "0.2.0", "configurations": [ { "name": "Attach to Docker Ruby", "type": "ruby", "request": "attach", "remoteHost": "localhost", "remotePort": 1234, "localRoot": "${workspaceFolder}", "remoteRoot": "/app", // 这里要和容器内的代码根目录一致 "showDebuggerOutput": true // 开启方便排查连接问题 } ] }
3. 在容器内启动调试服务器
进入运行中的容器,或者在启动命令里直接替换成调试启动命令,核心是用rdebug-ide来启动你的应用,让它监听调试连接:
- 如果是Rails应用:
rdebug-ide --host 0.0.0.0 --port 1234 --dispatcher-port 26162 -- bin/rails s - 如果是普通Ruby脚本:
注意这里要加rdebug-ide --host 0.0.0.0 --port 1234 -- your_script.rb--host 0.0.0.0,否则调试服务器只监听容器内部的localhost,VSCode连不上。
4. 附加调试器并验证
- 在VSCode里给你要调试的代码行打上断点(点击行号左侧)
- 点击调试面板的绿色启动按钮,等待VSCode显示「已附加」
- 触发代码执行(比如访问Rails接口、运行脚本),断点应该会命中,此时你就可以像本地调试一样查看变量、单步执行了
一些踩坑提醒
- Ruby 2.5对
debase版本要求很严格,一定要用~> 0.2.4.beta10,用稳定版会出现兼容性错误 - 如果断点没命中,先检查
localRoot和remoteRoot是否完全对应,路径大小写也要注意(Linux容器对大小写敏感) - 调试服务器启动后,不要直接用
rails s或者ruby script.rb启动应用,必须通过rdebug-ide代理启动
内容的提问来源于stack exchange,提问作者justapilgrim
相关产品推荐
相关产品推荐

