在运行 Tomcat 的容器内部署和调试 Java Web 应用程序
您可以使用 Docker 容器来运行应用服务器,以部署和调试您的 Java Web 应用程序。 这是测试和调试网络应用程序的好方法,可在各种版本的应用服务器上重现各种环境。
本教程介绍了如何使用 Docker Compose 文件来运行部署到 Tomcat 应用服务器的 Web 应用程序的 Docker 容器,并进行调试所需的所有配置:公开调试器端口,将包含 WAR 文件的输出目录绑定挂载到容器中的 Tomcat,并打开调试器套接字。
克隆示例项目
该应用程序的源代码托管在 GitHub 上 https://github.com/IdeaUJetBrains/Tomcat_docker_debug
在主菜单中,前往 。
请指定存储库的 URL,然后点击 克隆。
如有必要,请同意在新窗口中打开克隆的项目。

构建 WAR 工件
在主菜单中,进入
请选择 tomcat_docker_debug:war exploded 并构建它。

生成的构建工件出现在项目根目录下 目标/ 。
使用 Docker Compose 运行应用程序
打开 docker-compose.yml 。
点击
,位于
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。
检查应用程序是否正在运行
打开容器日志,并确保其以 Tomcat 已启动的消息结束。
请在浏览器中打开以下 URL: http://localhost:8888/Tomcat_docker_debug-1.0-SNAPSHOT/api/hello-world。 它应该返回一个页面
Hello, World!

附加调试器
运行名为 远程JVM 调试 的
remote_tomcat_debug配置,该配置远程附加调试器。打开 src/main/java/com/example/tomcat_docker_debug/HelloResource.java 并在
hello()方法中带return "Hello, World!";的行上设置断点
请刷新或再次打开 REST 端点: http://localhost:8888/Tomcat_docker_debug-1.0-SNAPSHOT/api/hello-world。 这次,它应该在所述方法内触发断点。