在Docker中使用IntelliJ调试Java应用程序

4

我对此不太了解。您能告诉我如何设置在Docker中运行的Java调试程序吗?

该项目是使用Maven构建的,然后Docker使用*.war来运行程序。 据我所知,需要远程推送IntelliJ以进行调试。

container

docker-compose.yml :

# myapp (Wildfly + Keycloak + myapp)
  myapp-myapp:
    image: myapp/wildfly-myapp:wf11
    container_name: myapp-myapp
    depends_on:
      - myapp-postgres
      - myapp-mailhog
    environment:
      TZ : Europe/Paris
      KEYCLOAK_URL: http://localhost:8080/auth
      WILDFLY_PROXY_ADDRESS_FORWARDING: "true"
      JAVA_OPTS: 
      DB_CONNEXION_URL: jdbc:postgresql://myapp-postgres:5432/myapp_db
      DB_CONNEXION_URL_DELIMITER: "|"
      DB_HOST: myapp-postgres
      DB_NAME: ${DB_NAME}
      DB_PASSWORD: ${DB_PASSWORD}
      DB_USER: ${DB_USER}
      KEYCLOAK_DB_CONNEXION_URL: jdbc:postgresql://myapp-postgres:5432/keycloak
      KEYCLOAK_DB_CONNEXION_URL_DELIMITER: "|"
      KEYCLOAK_DB_USER : keycloak
      KEYCLOAK_DB_PASSWORD : keycloak
      KEYCLOAK_DB_NAME : keycloak
      KEYCLOAK_DB_HOST: postgres
      APP_CLUSTER: "false"
      JGROUPS_EXTERNAL_ADDRESS: 10.178.27.30
      JGROUPS_TCP_EXTERNAL_PORT: 7600
      JGROUPS_TCP_BIND_PORT: 7600
      JGROUPS_DEFAULT_STACK: tcpping
      JGROUPS_INITIAL_HOSTS: "10.178.27.30[7600]"
      WILDFLY_CLUSTER_PASSWORD:
      WILDFLY_NODE_NAME: myapp-master
      SMTP_HOST: myapp-mailhog
      SMTP_PORT: 1025
      SMTP_FROM: ${SMTP_FROM}
      SMTP_USERNAME: ""
      SMTP_PASSWORD: ""
      myapp_LOG_LEVEL: "ALL"
      myapp_DEBUG_LEVEL: "ALL"
    volumes:
       - ./myapp/data:/opt/jboss/myappdata
       - ./myapp/logs:/opt/jboss/wildfly/standalone/log
       - ./myapp/deployments:/opt/jboss/wildfly/standalone/deployments
       - ./myapp/configuration/myapp-admin.properties:/opt/jboss/wildfly/standalone/configuration/myapp-admin.properties
       - ${ST_SRC}:/opt/jboss/myappdata/${PROVIDER_CODE}/frontend/st
       - ${CC_SRC}:/opt/jboss/myappdata/${PROVIDER_CODE}/frontend/cc
       - ${SC_SRC}:/opt/jboss/myappdata/${PROVIDER_CODE}/frontend/sc
    ports:
      - "8080:8080"
      - "7600:7600"

你是自己创建 Dockerfile 还是使用库? - Looki
1
这可能会有所帮助 使用IntelliJ从Docker中运行的Java应用程序进行调试 - fiveelements
嗯,你可以在我的答案中JAVA_OPTS:后面添加Java Arg,并在ports:下包含端口8000。 - Looki
1个回答

8
你可以通过以下JVM参数启用远程调试。
-agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n

接下来你可以使用 运行 -> 附加到进程 来连接Intellij调试器。

您的应用程序应该指定端口(在此示例中为8000)。

有关更多信息,请参见此处

对于这个示例(使用Wildfly的Docker-Compose)

environment:
  ...
  JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n
  ...
ports:
  - "8000:8000"
  ...

一般情况下

Docker

对于在Docker中使用,您还需要公开端口。

EXPOSE 8000
ENTRYPOINT ["java", "-jar", "-agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n", "/path/to/my/java.jar"]

然后

docker run -p 8000:8000 <image>

IntelliJ (从2019.1版本开始)

现在,IntelliJ可以通过此过程自动完成。


我有一个类似容器的东西: 46aa7c658b99 myapp/wildfly-myapp:wf11 "/opt/jboss/docker-e…" 22小时前 已上线5小时 (健康状态) 1883/tcp, 0.0.0.0:7600->7600/tcp, 4000/tcp, 9990/tcp, 0.0.0.0:8080->8080/tcp - Dmitry Krychylskyy
你如何将IntelliJ中的代码传输到Docker容器中?你编写了Dockerfile吗?还是使用了Maven插件? - Looki
我使用 docker-compose up 命令来启动所有容器。 - Dmitry Krychylskyy
你是否在使用非自己创建的容器?如果是,使用的是哪些容器? - Looki
如果您在问题帖子中包含了所有步骤和docker-compose.yml文件,那将非常有帮助。 - Looki
我使用Maven的package命令构建了一个*.war文件。 - Dmitry Krychylskyy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接