代码之家  ›  专栏  ›  技术社区  ›  Dan

在docker中调试spring boot应用程序不起作用

  •  0
  • Dan  · 技术社区  · 6 年前

    -agentlib:jdwp=transport=dt_socket,address=5050,server=y,suspend=n 以启用调试。我已经公开了端口5050,并将其映射到docker compose文件中。 当我在容器上运行应用程序时,我开始通过IntelliJ进行调试,它会连接起来,但是如果我设置了断点,它就永远不会被命中。现在我不确定在远程调试器连接时我做错了什么。我甚至试着改变设置 suspend=y

    以下是我所做的相关工作;

    FROM openjdk:8-alpine
    WORKDIR /
    EXPOSE 8000 5050
    COPY target /
    CMD java -agentlib:jdwp=transport=dt_socket,address=5050,server=y,suspend=n -jar /target/blockchain*.jar
    

    码头工人-合成.yml

    multichain-api:
      build:
        context: ./blockchain
      networks:
        - multichain-network
      ports:
        - "8000:8000"
        - "5050:5050"
      volumes:
        - type: bind
          source: ${PWD}/blockchain/target
          target: /target
      container_name: multichain-api
    

    你知道我哪里出错了吗?

    2 回复  |  直到 6 年前
        1
  •  4
  •   pfrandsen    6 年前

    您可能需要在address参数中添加0.0.0.0或*

    • 地址=0.0.0.0:5050
        2
  •  1
  •   lareynol    5 年前

    你能用“ps”命令确认在容器中有一个进程实例在运行,并且它应用了调试参数吗?

    当我试图在Docker中使用AdobeExperienceManager(AEM)设置调试时,我一直在努力解决同样的问题。如果没有足够的可用内存,AEM会自动分叉进程,但不会将调试参数应用于新进程。

    在本例中,解决方案是应用“-forkargs”参数,以便将调试配置传递给分叉进程。完成此操作后,断点现在可以正确地挂起线程。

    这个解决方案几乎肯定不会在您的情况下工作,但是您可以通过检查进程是否在没有参数的情况下分叉来验证是否是类似的问题。

        3
  •  0
  •   stxe    6 年前

    配置看起来不错。如果调试器连接正确,请检查是否在IntelliJ中启用了断点。

    如果运行配置仍然不起作用,你能提供它吗?