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

如何调试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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:32:28