超简单!docker容器远程debugger(springboot)

简介: 超简单!docker容器远程debugger(springboot)

一、背景



公司有一个项目是通过docker管理的,部署起来确实很方便简洁,但是要命的是:如果服务出现了bug,我们只能查看日志,日志量很大,bug定位时间特别长,非常不方便,而且没有远程debugger,于是乎就想着给项目添加一个远程debugger.


二、环境



  1. docker
  2. springboot
  3. jdk8
  4. docker-compose
  5. idea


三、代码实践



1.修改配置文件


  1. 在dockerFile中添加一个暴露端口5005
FROM openjdk:8
LABEL description="Java 8"
EXPOSE 8088
EXPOSE 5005


  1. 在执行语句中添加-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"]


  1. 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打开远程调试


  1. 点击edit configuration添加启动配置
  2. 点击“+”,添加远程
  3. 给远程配置中添加ip和port,示意图如下:

640.png


  1. debugger启动本地服务(注意本地代码需要和服务器上代码一致)
  2. 如果出现连接超时的情况,请检查本机ip是否可以ping通,然后就是检查服务器是否开放5005端口(你设定的那个端口),按照步骤来问题基本都可以被解决。

四、结果展示



  1. 查看docker镜像日志docker logs -f --tail=600 java_test

640.png


  1. idea断点测试


640.png

目录
相关文章
|
4天前
|
JSON JavaScript 开发者
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
【8月更文挑战第7天】Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
|
2天前
|
Docker 容器
|
1天前
|
缓存 开发者 Docker
Dockerfile是Docker容器化过程中的核心组件,它允许开发者以一种可重复、可移植的方式自动化地构建Docker镜像
【8月更文挑战第19天】Dockerfile是构建Docker镜像的脚本文件,含一系列指令定义镜像构建步骤。每条大写指令后跟至少一个参数,按序执行,每执行一条指令即生成新的镜像层。常用指令包括:FROM指定基础镜像;RUN执行构建命令;EXPOSE开放端口;CMD指定容器启动行为等。优化策略涉及减少镜像层数、选择轻量基础镜像、利用缓存及清理冗余文件。示例:基于Python应用的Dockerfile包括设置工作目录、复制文件、安装依赖等步骤。掌握Dockerfile有助于高效自动化构建镜像,加速应用部署。
|
1天前
|
应用服务中间件 Linux nginx
Linux虚拟机磁盘扩容、Docker容器磁盘满的问题、Docker安装nginx
这篇文章讨论了Linux虚拟机磁盘扩容的方法,包括外部配置、具体扩容步骤和扩容后的效果验证。同时,文章还涉及了Docker容器磁盘满的问题及其解决方法,如删除不必要的镜像和容器,以及调整Docker的安装路径。此外,还提到了意外情况的处理,例如误删除停止的容器后的应对措施。最后,文章还提供了使用Docker安装nginx的步骤和成功访问的截图。
Linux虚拟机磁盘扩容、Docker容器磁盘满的问题、Docker安装nginx
|
2天前
|
网络协议 Linux 网络安全
遇到Docker容器网络隔断?揭秘六种超级实用解决方案,轻松让Docker容器畅游互联网!
【8月更文挑战第18天】Docker容器内网络不通是开发者常遇问题,可能因网络配置错、Docker服务异常或防火墙阻碍等原因引起。本文提供六种解决策略:确认Docker服务运行状态、重启Docker服务、检查与自定义Docker网络设置、验证宿主机网络连接、临时禁用宿主机IPv6及检查防火墙规则。通过这些步骤,多数网络问题可得以解决,确保容器正常联网。
10 1
|
3天前
|
安全 Ubuntu Docker
深度挖掘Docker 容器
【8月更文挑战第16天】Docker容器间的连接是容器化技术的关键,支持容器与宿主机的数据交换。主要方法包括:1) 利用Docker网络驱动创建自定义网络,使容器相连通信;2) 采用Docker Compose通过配置文件简化多容器应用的部署与互联;3) 虽不推荐,早期使用--link参数实现容器互联;4) 通过环境变量配置连接信息;5) 共享卷支持文件共享和间接通信。推荐使用Docker网络和Docker Compose以实现高效灵活的容器间通信。
18 3
|
1天前
|
Shell 调度 Docker
在Docker中,如何清理批量后台停止的容器?
在Docker中,如何清理批量后台停止的容器?
|
1天前
|
Shell Docker 容器
在Docker中,如何停止所有正在运行的容器?
在Docker中,如何停止所有正在运行的容器?
|
1天前
|
存储 Docker 容器
在Docker中,容器退出后,通过docker ps命令查看不到,数据会丢失么?
在Docker中,容器退出后,通过docker ps命令查看不到,数据会丢失么?
|
1天前
|
存储 Ubuntu 应用服务中间件
在Docker中,怎么快速查看本地的镜像和容器?
在Docker中,怎么快速查看本地的镜像和容器?