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

Som*_*era 24 java remote-debugging intellij-idea docker

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

在Clouds下,我使用的是当我点击'+'时显示的默认值.IntelliJ文档说这应该没问题.在这里

API URL: http://127.0.0.1:2376
Certificates folder: <empty>
Run Code Online (Sandbox Code Playgroud)

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

在运行/调试配置下,我使用的是Docker Deployment,以及以下值:

Deployment: Docker Image
Image ID: The docker image ID 
Container name: The name of the container
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,我得到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
Run Code Online (Sandbox Code Playgroud)

Som*_*era 24

Sheesh没关系.我真的不需要Docker Integration插件.这似乎更像是通过Intellij直接部署和管理Docker而不是调试.

要调试我的docker容器中运行的jetty应用程序,我只需远程调试:

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

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


小智 11

运行 docker 镜像如下:

\n
docker run -d -p 8080:8080  -p 5005:5005 \\\n    -e JAVA_TOOL_OPTIONS="-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n" \\\n    imagename:tagname\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

Intellij配置步骤:

\n
    \n
  1. 从菜单栏中单击run\xe2\x86\x92 Edit Configurations\xe2\x86\x92 在左侧面板中单击Remote\xe2\x86\x92 单击+符号以添加调试配置

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

    \n
  4. \n
  5. 选择要调试的模块类路径,然后应用设置

    \n
  6. \n
  7. 要连接,请从菜单中运行上述远程配置run

    \n
  8. \n
\n

示例配置

\n


Nat*_*sen 6

在 Java 8 中,JDK 支持 JAVA_TOOL_OPTIONS 环境变量,因此要为任何 Java 应用程序启用调试器,您可以将以下参数添加到您的docker run命令中:

-p 8000:8000 -e "JAVA_TOOL_OPTIONS=\"-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n\""
Run Code Online (Sandbox Code Playgroud)

然后启动连接到 localhost:8000 的远程调试会话。

  • 不需要外部双引号:`JAVA_TOOL_OPTIONS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"`。 (3认同)