![b57ab393ac1cdb7bed753f37bd9e5afe.png](https://i-blog.csdnimg.cn/blog_migrate/eb205bfbbd24cf7fd1645de671145728.jpeg)
一、背景
公司有一个项目是通过docker管理的,部署起来确实很方便简洁,但是要命的是:如果服务出现了bug,我们只能查看日志,日志量很大,bug定位时间特别长,非常不方便,而且没有远程debugger,于是乎就想着给项目添加一个远程debugger.
二、环境
- docker
- springboot
- jdk8
- docker-compose
- idea
三、代码实践
1.修改配置文件
- 在dockerFile中添加一个暴露端口5005
FROM openjdk:8
LABEL description="Java 8"
EXPOSE 8088
EXPOSE 5005
- 在执行语句中添加
-agentlib:jdwp=transport=dt_socket
FROM openjdk:8
LABEL description="Java 8"
EXPOSE 8088
EXPOSE 5005
ADD /target/docker_images-0.0.1-SNAPSHOT.jar docker_images-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java", "-jar","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005","docker_images-0.0.1-SNAPSHOT.jar"]
- docker-compse.yml中添加port:5005
version: '3'
services:
test:
container_name: java_test
build:
context: .
dockerfile: DockerFile
image: java/test:8.0.0
ports:
- "8088:8088"
- "5005:5005"
volumes:
- /logs:/logs
2. idea打开远程调试
- 点击edit configuration添加启动配置
- 点击“+”,添加远程
- 给远程配置中添加ip和port,示意图如下:
![7ed63a94f811d2f0f35be15d04b89fcf.png](https://i-blog.csdnimg.cn/blog_migrate/99af677dbfa6c2185a2491891224bd9b.jpeg)
- debugger启动本地服务(注意本地代码需要和服务器上代码一致)
- 如果出现连接超时的情况,请检查本机ip是否可以ping通,然后就是检查服务器是否开放5005端口(你设定的那个端口),按照步骤来问题基本都可以被解决。
四、结果展示
- 查看docker镜像日志
docker logs -f --tail=600 java_test
![b2f525f6cb2d0601e493e5e3ce0bdd08.png](https://i-blog.csdnimg.cn/blog_migrate/3c478bf717e5c768d826e71f045dc6f9.jpeg)
- idea断点测试
![b2f525f6cb2d0601e493e5e3ce0bdd08.png](https://i-blog.csdnimg.cn/blog_migrate/3c478bf717e5c768d826e71f045dc6f9.jpeg)