如何调试Docker运行的Phoenix应用?IEx.pry无法触发问题
解决Docker环境下Phoenix应用IEx.pry无法触发调试的问题
我之前在Docker里调试Phoenix项目时也踩过这个坑,IEx.pry死活不触发交互,折腾了半天才找到问题根源——容器的终端配置没跟上,给你分享下我解决的步骤:
1. 调整docker-compose.yml的终端配置
Docker容器默认不会分配交互式终端,这会导致IEx.pry无法和你的控制台建立连接。你需要在web服务的配置里加上两个关键参数:
version: '3' services: web: build: . command: iex -S mix phx.server # 新增这两行,开启交互式终端支持 tty: true stdin_open: true ports: - "4000:4000" # 保留你原有的volumes、depends_on等配置
2. 确保启动命令的交互性
如果你习惯用docker-compose run启动服务,记得加上-i(交互式)和-t(分配TTY)参数,完整命令如下:
docker-compose run -it web iex -S mix phx.server
如果已经把启动命令写到docker-compose.yml里了,直接用docker-compose up web启动也可以,yml里的tty和stdin_open会生效。
3. 验证代码是否被执行到
有时候IEx.pry没反应,可能是代码根本没走到那一步。你可以在IEx.pry前加个打印语句确认:
def index(conn, _params) do drivers = Repo.all(Driver) IO.puts "===== 进入index动作了 =====" # 新增这句 IEx.pry ... end
启动服务后刷新页面,如果控制台能看到这句打印,说明代码路径没问题;如果看不到,得先排查路由是否配置正确、有没有中间件拦截请求。
另外你代码里require IEx的位置是对的,放在模块顶部完全没问题。
4. 重启容器生效配置
修改完docker-compose.yml后,一定要先停止旧容器再重新启动,避免配置不生效:
docker-compose down docker-compose up --build web
做完这些调整后,再刷新页面触发index动作,应该就能在IEx控制台看到调试提示了,输入c(continue)或者其他调试命令就能正常交互啦。
内容的提问来源于stack exchange,提问作者Lorem
相关产品推荐
相关产品推荐

