繁体   English   中英

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

[英]How to debug an application running in Docker with IntelliJ?

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

在 Clouds 下,我使用的是单击“+”时显示的默认值。 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: Connect to 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 容器内运行的码头应用程序,我只是远程调试:

运行 | 编辑配置 | + | 偏僻的

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

在 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配置步骤:

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

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

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

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

示例配置

如果有人想在 Windows 机器上进行开发,并同时在远程 docker 上运行/调试应用程序,您可以在此处查看我的 intellij 插件: https ://bojanv55.wordpress.com/2018/08/03/intellij-idea -remote-debug-of-java-code-inside-docker-container/

如果您使用的是 docker composer,请将以下更改应用于 Dockerfile 和 docker-compose.yml

文件

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 容器后运行它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM