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

无法调试Docker容器化的Rails应用问题求助

解决Docker容器中Rails rdbg断点无提示符问题

核心原因

bin/dev通过foreman同时启动web和tailwind两个进程,foreman会接管终端的输入输出,导致rdbg的调试提示符无法传递到当前终端,无法输入调试命令。

解决方案

方案1:拆分进程启动(最直接)

  1. 停止当前运行的bin/dev进程
  2. 在已attach的容器终端里单独启动web服务:
    bin/rails server -p 3000 -b 0.0.0.0
    
  3. 另开一个终端,进入容器启动tailwind监听:
    docker exec -it containerName bin/rails tailwindcss:watch[poll]
    
    此时web进程直接占用当前终端,触发断点后会正常显示rdbg提示符,可输入调试命令。

方案2:修改Procfile.dev启用远程调试

修改Profile.dev的web进程配置,让rdbg开启远程调试模式:

web: rdbg -O -n -c -- bin/rails server -p 3000 -b 0.0.0.0
css: bin/rails tailwindcss:watch[poll]
  • -O:允许外部连接调试会话
  • -n:不暂停进程启动,直到断点触发时再进入调试
  • -c:连接后直接显示调试提示符

启动bin/dev后,在本地终端(无需attach进容器)执行:

docker exec -it containerName rdbg -A

即可连接到调试会话,获得输入提示符。

方案3:优化Docker启动配置

修改docker-compose.yml,让容器直接启动rails服务,避免手动attach后启动:

services:
  changes-log:
    image: changes-log
    build: .
    ports:
      - "3000:3000"
    stdin_open: true
    tty: true
    command: bin/rails server -p 3000 -b 0.0.0.0

启动容器后,直接用docker exec -it changes-log bash进入容器,按需启动tailwind监听,此时web进程的调试会话会正常显示提示符。

内容的提问来源于stack exchange,提问作者Johan Donado B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:38:21