前言
之前整理过一篇如何利用Intellij IDEA 远程调试部署在远程服务器Tomcat中的Web应用。
链接地址:ntelliJ IDEA远程调试(Debug)Tomcat
但现在大多数应用都是springboot项目,且是直接java -jar形式运行的,而且都是容器化部署的,那么远程调试方式还是类似吗?
答案是肯定的。
验证
制作镜像
- 一个springboot web应用,名为security-cloud-product-1.0.0.jar,且对外提供Rest服务,端口为8181
- Dockerfile
FROM centos-openjdk:latest
MAINTAINER "fei.fuzeng"
ENV LANG en_US.UTF-8
USER root
RUN mkdir /home/seccloud
WORKDIR /home/seccloud
ADD security-cloud-product-1.0.0.jar /home/seccloud
ADD entrypoint.sh /home/seccloud
RUN chmod +x /home/seccloud/entrypoint.sh
EXPOSE 8181
ENTRYPOINT ["/home/seccloud/entrypoint.sh"]
- 启动脚本 entrypoint.sh ,注意这里有使用两个端口:5005和8181,一个远程调试端口,一个服务端口
#!/bin/bash
MAIN_PATH="/home/seccloud/"
cd ${MAIN_PATH}
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar security-cloud-product-*.jar --server.port=8181
应用启动
准备工作准备好之后,执行命令制作镜像
docker build -t security-cloud-product:1.0 .
基于镜像启动应用
docker run -d -p 8181:8181 -p 5005:5005 --name product security-cloud-product:1.0
验证应用是否正常启动
- 直接访问服务对外提供的Rest服务
- 查看后台容器是否正常启动
docker ps -a
注意事项
与其说是注意事项 不如说是自己踩得坑!
- 自定义容器启动脚本报错:exec user process caused “no such file or directory”
原因是镜像的entrypoint设置的启动脚本格式是dos,在linux系统上用vi修改成unix格式即可
# vi filename
# :set ff 回车后看到当前文件的fileformat格式
# :set ff=unix 回车后输入:wq保存文件,重新build镜像即可。
参考文档
- https://www.cnblogs.com/cf532088799/p/7719935.html