Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker中的IntelliJ调试Java应用程序_Java_Debugging_Docker Compose - Fatal编程技术网

Docker中的IntelliJ调试Java应用程序

Docker中的IntelliJ调试Java应用程序,java,debugging,docker-compose,Java,Debugging,Docker Compose,我是新来的。您能告诉我如何设置在Docker中运行的调试Java程序吗 该项目是在Maven的帮助下构建的,之后Docker使用*.war运行该程序。 据我所知,必须远程推送IntelliJ进行调试 docker-compose.yml: # myapp (Wildfly + Keycloak + myapp) myapp-myapp: image: myapp/wildfly-myapp:wf11 container_name: myapp-myapp depen

我是新来的。您能告诉我如何设置在Docker中运行的调试Java程序吗

该项目是在Maven的帮助下构建的,之后Docker使用
*.war
运行该程序。 据我所知,必须远程推送IntelliJ进行调试

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"

可以使用以下JVM参数启用远程调试

-agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n
然后,您可以使用
Run
->
attach to process
应用程序应指定端口(本例中为8000)

有关更多信息,请参阅

对于本例(Docker与Wildfly组合)

一般来说

码头工人

要在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>
docker运行-p 8000:8000
IntelliJ(从2019.1年开始)

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

您是自己创建Dockerfile还是使用库?这可能会很有帮助,嗯,您可以在
Java选项:
之后在我的回答中添加Java参数,并在
端口:
下包含端口8000。我有一个类似于容器的容器: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/tcpHow您是否将IntelliJ中的代码放入Docker容器?您是否编写了Docker文件?您是否使用Maven插件?我使用
Docker compose up
来运行所有容器。那么您是否使用的是您自己创建的容器?如果是,哪些容器?它将如果你在问题帖中包含了所有步骤和docker-compose.yml,那将非常有帮助
docker run -p 8000:8000 <image>