docker学习(十一)SpringCloud将线上环境debug到本地IDEA

37 阅读1分钟

引言:一般本地开发完的功能,上传到dev环境,很多时候,本地没有问题,上了linux就各种问题。如何将dev环境的请求指向本地,在本地观察数据变化,可以快速定位问题。

项目部署环境

gitlab cicd、docker

项目配置变更

.gitlab-ci 文件

variables:
  GIT_STRATEGY: fetch
  project_name: "online-taxi"
  service_name: "order-service"
  port: 9050
  debug_port: 9051

stages:
  - build
  - deploy

############################## HW DEV ENV ##############################

dev-hw:build:
  tags:
    - dev-hw
  stage: build
  script:
    - echo -e "\n[$CI_JOB_NAME] $(date) ($CI_BUILD_REF_NAME) ($CI_BUILD_STAGE)\n" | tee -a /tmp/test.txt
    - mvn clean package
    - sh scripts/clean-image.sh $service_name latest
    - docker build -f Dockerfile -t $service_name:latest .
  when:
    manual

dev-hw:deploy:
  tags:
    - dev-hw
  stage: deploy
  needs: [ "dev-hw:build" ]
  script:
    - echo -e "\n[$CI_JOB_NAME] $(date) ($CI_BUILD_REF_NAME) ($CI_BUILD_STAGE)\n" | tee -a /tmp/test.txt
    - sh scripts/clean-container.sh $service_name
    - docker create -m 1G --name $service_name -p $port:$port -p $debug_port:5005 -e "SPRING_PROFILES_ACTIVE=dev-hw" -v /var/log/$project_name:/var/log/$project_name $service_name:latest
    - docker start $service_name
  when:
    manual

主要增加这两行
debug_port: 9051
-p $debug_port:5005
目的:将容器5005端口指向宿主机9051

Dockerfile 增加配置

FROM openjdk:8-jdk-alpine
VOLUME /tmp
VOLUME /var/log/online-taxi
ADD target/order-service.jar order-service.jar
EXPOSE 9050
ENV TZ Asia/Shanghai
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add tzdata ttf-dejavu fontconfig \
    && cp /usr/share/zoneinfo/${TZ} /etc/localtime \
    && echo ${TZ} > /etc/timezone \
    && apk del tzdata
ENTRYPOINT ["java", "-Xdebug", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/order-service.jar"]

主要增加
“-Xdebug”, “-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005”,

然后重新部署dev环境

idea配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
post请求dev环境接口,本地可收到请求。前提:其他人没有在调用这个接口;本地与线上 代码、环境都是一致的