IntelliJ IDEA 2025.1 Help

在运行 Tomcat 的容器内部署和调试 Java Web 应用程序

您可以使用 Docker 容器来运行应用服务器,以部署和调试您的 Java Web 应用程序。 这是测试和调试网络应用程序的好方法,可在各种版本的应用服务器上重现各种环境。

本教程介绍了如何使用 Docker Compose 文件来运行部署到 Tomcat 应用服务器的 Web 应用程序的 Docker 容器,并进行调试所需的所有配置:公开调试器端口,将包含 WAR 文件的输出目录绑定挂载到容器中的 Tomcat,并打开调试器套接字。

克隆示例项目

该应用程序的源代码托管在 GitHub 上 https://github.com/IdeaUJetBrains/Tomcat_docker_debug

  1. 在主菜单中,前往 文件(F) | 新建(N) | 来自版本控制的项目…

  2. 请指定存储库的 URL,然后点击 克隆

  3. 如有必要,请同意在新窗口中打开克隆的项目。

克隆包含示例项目的仓库

构建 WAR 工件

  1. 在主菜单中,进入 构建(B) | 编译工件…

  2. 请选择 tomcat_docker_debug:war exploded 并构建它。

构建 WAR 工件

生成的构建工件出现在项目根目录下 目标/

使用 Docker Compose 运行应用程序

  1. 打开 docker-compose.yml

  2. 点击 docker compose up ,位于 services 旁边的标尺。

此操作会创建一个 Docker Compose 运行配置,将应用程序作为单独的 Docker Compose 服务运行,并定义在 docker-compose.yml 中。

图像

本教程使用了兼容 Jakarta EE 9.1 的图像 tomcat:10.0-jdk17。 如果您的应用程序使用 Jakarta EE 10,请在 Tomcat 10.1 上运行。 对于 Java EE 8,请使用 Tomcat 9 及更早版本。

端口

要从您的主机访问该应用程序,Docker Compose 将容器中的端口 8080 暴露为主机上的端口 8888。 它还会将容器中的端口 5005 映射为主机上的端口 5005 以供调试器使用。

而不是将 WAR 工件复制到容器中,Docker Compose 将应用程序输出目录 ./目标 绑定挂载到容器中的 Tomcat 目录: /usr/local/tomcat/webapps

环境变量

要附加调试器,Docker Compose 将 JAVA_OPTS 环境变量设置为以下内容:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
命令

Docker Compose 覆盖了 Tomcat 镜像声明的默认命令,并将其设置为 catalina.sh run

检查应用程序是否正在运行

  1. 打开容器日志,并确保其以 Tomcat 已启动的消息结束。

  2. 请在浏览器中打开以下 URL: http://localhost:8888/Tomcat_docker_debug-1.0-SNAPSHOT/api/hello-world。 它应该返回一个页面 Hello, World!

Hello, World! 来自 Java web 应用程序的响应

附加调试器

  1. 运行名为 远程JVM 调试remote_tomcat_debug 配置,该配置远程附加调试器。

  2. 打开 src/main/java/com/example/tomcat_docker_debug/HelloResource.java 并在 hello() 方法中带 return "Hello, World!"; 的行上设置断点

    为端点设置断点
  3. 请刷新或再次打开 REST 端点: http://localhost:8888/Tomcat_docker_debug-1.0-SNAPSHOT/api/hello-world。 这次,它应该在所述方法内触发断点。

最后修改日期: 2025年 4月 24日