如何使用 IntelliJ 调试在 Docker 中运行的应用程序?

我有一个在docker中运行的Jetty应用程序。我想使用我的本地IntelliJ调试此应用程序。我在v 14.1上,所以我已经安装了Docker集成插件。

在“云”下,我使用的是单击“+”时显示的默认值。IntelliJ文档说这应该没问题。在这里

API URL: http://127.0.0.1:2376
Certificates folder: <empty>

我不确定这些值的用途是什么,所以我不知道这些值是否正确。

在“运行/调试配置”下,我正在使用 Docker 部署,以及以下值:

Deployment: Docker Image
Image ID: The docker image ID 
Container name: The name of the container

当我尝试运行此命令时,我得到javax.ws.rs.ProcessingException:org.apache.http.conn.HttpHostConnectException:连接到 http://127.0.0.1:2376[/127.0.0.1]失败:连接被拒绝

显然,我使用的 API URL 值不正确。关于该值应该是多少的任何建议?

我的调试选项是:

 -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n -Djava.compiler=NONE

答案 1

嘘 没关系。我真的不需要Docker集成插件。似乎这更多的是直接通过Intellij部署和管理Docker,而不是调试。

为了调试在我的 docker 容器中运行的 jetty 应用,我只需远程调试:

运行|编辑配置|+ |远程

命令行参数已经正常,因为我使用了默认的远程调试选项。我只需要更改主机设置。在这里,我使用了我在 docker 容器中设置的主机名


答案 2

运行如下所示的 Docker 映像:

docker run -d -p 8080:8080  -p 5005:5005 \
    -e JAVA_TOOL_OPTIONS="-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n" \
    imagename:tagname

对于java 11及更高版本,将JAVA_TOOL_OPTIONS替换为“-agentlib:jdwp=transport=dt_socket,address=*:5005,server=y,suspend=n”

Intellij 配置步骤:

  1. 在菜单栏中单击左侧面板中的→ →单击→单击符号以添加调试配置runEdit ConfigurationsRemote+

  2. 添加新配置后,调试到远程 JVM。填写主机和端口号mode=Attach

  3. 选择要调试的模块类路径,然后应用设置

  4. 要进行连接,请从菜单中运行上述远程配置。run

example config


推荐