如何使用 IntelliJ 在 Docker 中调试应用程序 运行?
How to debug an application running in Docker with IntelliJ?
我在 docker 中有一个 Jetty 应用程序 运行ning。我想使用本地 IntelliJ 调试此应用程序。我使用的是 v 14.1,所以我安装了 Docker 集成插件。
在 Clouds 下,我使用的是单击“+”时显示的默认值。 IntelliJ 文档说这应该没问题。这里
API URL: http://127.0.0.1:2376
Certificates folder: <empty>
我不确定这些是做什么用的,所以我不知道这些值是否正确。
在 Run/Debug 配置下,我使用 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
谢什没关系。我真的不需要 Docker 集成插件。似乎这更适合直接通过 Intellij 部署和管理 Docker 而不是调试。
为了在我的 docker 容器中调试我的 Jetty 应用程序 运行,我只是远程调试:
运行 |编辑配置 | + |远程
命令行参数已经OK,因为我使用了默认的远程调试选项。我只需要更改主机设置。在这里,我使用了我在 docker 容器
中设置的主机名
如果有人想在 windows 机器上同时在远程 docker 上开发 run/debug 应用程序,你可以在这里查看我的 intellij 插件:https://bojanv55.wordpress.com/2018/08/03/intellij-idea-remote-debug-of-java-code-inside-docker-container/
在 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\""
然后启动连接到 localhost:8000 的远程调试会话。
运行 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 配置步骤:
从菜单栏点击run
→Edit Configurations
→在左侧面板点击Remote
→点击+
符号添加调试配置
添加新配置后,调试mode=Attach
到远程JVM。填写主机和端口号
Select 要调试的模块类路径然后应用设置
从 run
菜单连接 运行 上述远程配置。
如果您使用的是 docker composer,请将以下更改应用到 Dockerfile 和 docker-compose.yml
Docker 文件
FROM openjdk:11-jdk-slim
ARG JAR_FILE=report-manager/target/*.jar
ENV JAVA_TOOL_OPTIONS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
添加ENV JAVA_TOOL_OPTIONS部分
docker-compose.yml
services:
report-manager:
build:
context: .
dockerfile: report-manager/Dockerfile/
image: report-manager
ports:
- "5032:5032"
- "5005:5005"
打开5005端口
然后创建 IntelliJ Idea 通常的远程调试配置,并在部署 docker 容器后 运行 它。
我在 docker 中有一个 Jetty 应用程序 运行ning。我想使用本地 IntelliJ 调试此应用程序。我使用的是 v 14.1,所以我安装了 Docker 集成插件。
在 Clouds 下,我使用的是单击“+”时显示的默认值。 IntelliJ 文档说这应该没问题。这里
API URL: http://127.0.0.1:2376
Certificates folder: <empty>
我不确定这些是做什么用的,所以我不知道这些值是否正确。
在 Run/Debug 配置下,我使用 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
谢什没关系。我真的不需要 Docker 集成插件。似乎这更适合直接通过 Intellij 部署和管理 Docker 而不是调试。
为了在我的 docker 容器中调试我的 Jetty 应用程序 运行,我只是远程调试:
运行 |编辑配置 | + |远程
命令行参数已经OK,因为我使用了默认的远程调试选项。我只需要更改主机设置。在这里,我使用了我在 docker 容器
中设置的主机名如果有人想在 windows 机器上同时在远程 docker 上开发 run/debug 应用程序,你可以在这里查看我的 intellij 插件:https://bojanv55.wordpress.com/2018/08/03/intellij-idea-remote-debug-of-java-code-inside-docker-container/
在 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\""
然后启动连接到 localhost:8000 的远程调试会话。
运行 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 配置步骤:
从菜单栏点击
run
→Edit Configurations
→在左侧面板点击Remote
→点击+
符号添加调试配置添加新配置后,调试
mode=Attach
到远程JVM。填写主机和端口号Select 要调试的模块类路径然后应用设置
从
run
菜单连接 运行 上述远程配置。
如果您使用的是 docker composer,请将以下更改应用到 Dockerfile 和 docker-compose.yml
Docker 文件
FROM openjdk:11-jdk-slim
ARG JAR_FILE=report-manager/target/*.jar
ENV JAVA_TOOL_OPTIONS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
添加ENV JAVA_TOOL_OPTIONS部分
docker-compose.yml
services:
report-manager:
build:
context: .
dockerfile: report-manager/Dockerfile/
image: report-manager
ports:
- "5032:5032"
- "5005:5005"
打开5005端口
然后创建 IntelliJ Idea 通常的远程调试配置,并在部署 docker 容器后 运行 它。