无法调试Docker容器化的Rails应用问题求助
解决Docker容器中Rails rdbg断点无提示符问题
核心原因
bin/dev通过foreman同时启动web和tailwind两个进程,foreman会接管终端的输入输出,导致rdbg的调试提示符无法传递到当前终端,无法输入调试命令。
解决方案
方案1:拆分进程启动(最直接)
- 停止当前运行的
bin/dev进程 - 在已attach的容器终端里单独启动web服务:
bin/rails server -p 3000 -b 0.0.0.0 - 另开一个终端,进入容器启动tailwind监听:
此时web进程直接占用当前终端,触发断点后会正常显示rdbg提示符,可输入调试命令。docker exec -it containerName bin/rails tailwindcss:watch[poll]
方案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.
相关产品推荐
相关产品推荐

