一、背景
公司有一个项目是通过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,示意图如下:
- debugger启动本地服务(注意本地代码需要和服务器上代码一致)
- 如果出现连接超时的情况,请检查本机ip是否可以ping通,然后就是检查服务器是否开放5005端口(你设定的那个端口),按照步骤来问题基本都可以被解决。
四、结果展示
- 查看docker镜像日志
docker logs -f --tail=600 java_test
- idea断点测试