使用IDEA在WSL2的Ubuntu的docker中运行项目

1、新建项目

1.1 从远程仓库拉取代码

2、配置环境

2.1 配置IDEA运行环境

2.1.1 配置JDK

注意:Ubuntu 20.04运行项目请使用JDK11,使用JDK8会编译报错,报错如下:

2.1.2 配置Maven

2.1.3 配置运行环境

2.1.4 配置远程Debug

2.2、配置运行文件

2.2.1 pom.xml文件

<repositories><!-- 配置阿里云镜像源 --><repository><id>aliyun</id><name>aliyun</name><url>https://maven.aliyun.com/repository/public</url><layout>default</layout><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></repository></repositories><pluginRepositories><!-- 配置阿里云镜像源 --><pluginRepository><id>aliyun</id><name>aliyun</name><url>https://maven.aliyun.com/repository/public</url><layout>default</layout><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></pluginRepository></pluginRepositories>
 

2.2.2 Dockerfile文件

# 构建基础镜像阶段
FROM maven:3.9.6-eclipse-temurin-11 AS build# 接收构建参数 【在docker-compose.yml中修改】
# 工作目录
ARG APP_DIR
# 构建后Jar包名称
ARG APP_NAME# 设置工作目录
WORKDIR ${APP_DIR}# 复制项目文件到工作目录
COPY . .# 预先下载依赖并运行 Maven 构建命令
RUN mvn dependency:go-offline && \mvn clean compile package -DskipTests# 运行基础镜像阶段
FROM openjdk:8-jre-alpine# 接收构建参数 【在docker-compose.yml中修改】
# 工作目录
ARG APP_DIR
# 构建后Jar包名称
ARG APP_NAME
# 维护者信息
ARG MAINTAINER_INFO
# Remote Debug端口
ARG DEBUG_PORT# 设置环境变量
ENV APP_DIR=${APP_DIR}
ENV APP_NAME=${APP_NAME}
ENV DEBUG_PORT=${DEBUG_PORT}# 设置维护者信息
LABEL maintainer=${MAINTAINER_INFO}# 设置容器时区为上海
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone# 复制打包好的应用程序 JAR 文件到运行阶段镜像
COPY --from=build ${APP_DIR}/target/*.jar ${APP_DIR}/${APP_NAME}.jar# 容器启动执行命令
ENTRYPOINT ["sh", "-c", "java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=$DEBUG_PORT -jar $APP_DIR/$APP_NAME.jar"]

2.2.3 docker-compose.yml文件

version: '3.9'services:backend:build:context: .  # 项目根目录dockerfile: Dockerfile  # Dockerfile 文件名args:APP_DIR: /code/greatsoft/healthmesh/healthmesh-wize # 设置 Dockerfile 中的工作目录APP_NAME: HealthDockerShowcase  # 设置 Dockerfile 中的jar包名称DEBUG_PORT: 5005 # 设置 Dockerfile 中的Remote Debug端口MAINTAINER_INFO: luzhiyong@greatsoft.net # 设置 Dockerfile 中的维护者信息ports:- "8190:8190"  # 将容器的 8190 端口映射到主机的 8190 端口- "5005:5005"  # 将容器的 5005 端口映射到主机的 5005 端口networks:- app_networkdepends_on:- database  # 依赖于 database 服务- nacos- redisenvironment:- SPRING_DATASOURCE_URL=jdbc:postgresql://database:5432/postgres  # 设置数据库连接URL- SPRING_DATASOURCE_USERNAME=postgres- SPRING_DATASOURCE_PASSWORD=postgresdatabase:image: postgres:15   # PostgreSQL 数据库的镜像environment:- POSTGRES_USER=postgres- POSTGRES_PASSWORD=postgres- POSTGRES_DB=postgres  # 设置数据库名称ports:- "5433:5432"  # 将容器的 5432 端口映射到主机的 5433 端口volumes:- postgres_data:/var/lib/postgresql/data  # 挂载数据卷到容器中的 PostgreSQL 数据目录networks:- app_networkredis:image: redis:latestcontainer_name: redis-serverports:- "6379:6379"networks:- app_networknacos:image: nacos/nacos-server:latestcontainer_name: nacos-serverports:- "8848:8848"depends_on:- database  # 依赖于 database 服务environment:- MODE=standalone#      - SPRING_DATASOURCE_URL=jdbc:postgresql://database:5432/postgres  # 设置 Nacos 使用的数据库连接URL#      - SPRING_DATASOURCE_USERNAME=postgres#      - SPRING_DATASOURCE_PASSWORD=postgres#      - PREFER_HOST_MODE=hostname#      - spring.datasource.driver-class-name=org.postgresql.Drivernetworks:- app_networknetworks:app_network:driver: bridgevolumes:postgres_data:  # 定义一个名为 postgres_data 的数据卷

注意:若Dockerfile书写错误会出现build错误。

2.2.4 执行Shell脚本修改数据库用户名和密码

#!/bin/bash# 设置数据库容器名称
DATABASE_CONTAINER_NAME="healthmesh-wize-database-1"# 设置新的数据库用户名和密码
NEW_USERNAME="postgres"
NEW_PASSWORD="postgres"# 读取 showcase.sql 文件的内容到变量
if [ -f "showcase.sql" ]; thenSHOWCASE_SQL=$(cat showcase.sql)
elseSHOWCASE_SQL=""
fi# 函数:检查角色是否存在
role_exists() {local role=$1docker exec ${DATABASE_CONTAINER_NAME} psql -U postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='${role}'" | grep -q 1
}# 函数:创建超级用户
create_superuser() {local role=$1local password=$2if ! role_exists "${role}"; thendocker exec ${DATABASE_CONTAINER_NAME} psql -U postgres -c "CREATE ROLE ${role} WITH LOGIN SUPERUSER PASSWORD '${password}';"elseecho "Role ${role} already exists. Skipping creation."fi
}# 函数:修改数据库和用户密码
modify_db_user() {local db=$1local role=$2local password=$3docker exec ${DATABASE_CONTAINER_NAME} psql -U postgres -c "ALTER DATABASE ${db} OWNER TO ${role};"docker exec ${DATABASE_CONTAINER_NAME} psql -U postgres -c "ALTER USER ${role} WITH PASSWORD '${password}';"
}# 检查是否已经存在数据库容器
if [[ "$(docker ps -aq -f name=${DATABASE_CONTAINER_NAME})" ]]; thenecho "Database container already exists."docker-compose up -d ${DATABASE_CONTAINER_NAME}sleep 10docker exec ${DATABASE_CONTAINER_NAME} psql -U postgres -c "ALTER DATABASE postgres OWNER TO postgres;"sleep 10create_superuser "${NEW_USERNAME}" "${NEW_PASSWORD}"modify_db_user "postgres" "${NEW_USERNAME}" "${NEW_PASSWORD}"
elseecho "Database container does not exist. Creating..."docker-compose up -d ${DATABASE_CONTAINER_NAME}sleep 10docker exec ${DATABASE_CONTAINER_NAME} psql -U postgres -c "ALTER DATABASE postgres OWNER TO postgres;"sleep 10create_superuser "${NEW_USERNAME}" "${NEW_PASSWORD}"modify_db_user "postgres" "${NEW_USERNAME}" "${NEW_PASSWORD}"# 当第一次执行时,执行 showcase.sqlif [ ! -z "$SHOWCASE_SQL" ]; thenecho "Executing showcase.sql..."docker exec -i ${DATABASE_CONTAINER_NAME} psql -U ${NEW_USERNAME} -d postgres <<EOF
$SHOWCASE_SQL
EOFecho "SQL execution finished."elseecho "showcase.sql is empty or does not exist."fi
fi# 更新 Docker Compose 配置文件中的数据库用户名和密码
sed -i.bak "s/POSTGRES_USER=.*/POSTGRES_USER=${NEW_USERNAME}/g" docker-compose.yml
sed -i.bak "s/POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=${NEW_PASSWORD}/g" docker-compose.ymlsed -i.bak "s/SPRING_DATASOURCE_USERNAME=.*/SPRING_DATASOURCE_USERNAME=${NEW_USERNAME}/g" docker-compose.yml
sed -i.bak "s/SPRING_DATASOURCE_PASSWORD=.*/SPRING_DATASOURCE_PASSWORD=${NEW_PASSWORD}/g" docker-compose.yml# 更新 application.yml 中的数据库连接信息
sed -i.bak "s/username:.*/username: ${NEW_USERNAME}/g" ./src/main/resources/application.yml
sed -i.bak "s/password:.*/password: ${NEW_PASSWORD}/g" ./src/main/resources/application.yml# 重新构建 Docker 容器
docker-compose down
docker-compose up -decho "Docker creation finished."# 删除 Docker Compose 配置文件的备份
rm docker-compose.yml.bak
# 删除 application.yml 文件的备份
rm ./src/main/resources/application.yml.bakecho "Backup files deleted."

2.2.5 远程Debug

Dockerfile编写启动命令

ENTRYPOINT ["java", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005", "-jar", "jar包", "--spring.profiles.active=test"]

映射两个端口

一个是服务端口,一个远程调试端口

3、构建运行

3.1 使用IDEA执行docker-compose

3.1.1 在本机安装 Docker Desktop,否则无法在IDEA运行docker-compose.yml

https://docs.docker.com/desktop/release-notes/

3.1.2 配置IDEA

3.2 使用IDEA执行Shell脚本修改数据库用户名和密码

3.2.1 IDEA配置运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/20882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础—SQL—DQL(数据查询语言)分组查询

一、引言 分组查询的关键字是&#xff1a;GROUP BY。 二、DQL—分组查询 1、语法 SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后过滤条件 ]; 注意&#xff1a; 1、[ ] 里的内容可以有可以没有。 2、这条SQL语句有两块指定条件的地方&#…

Python:由b站临时短链接获取到永久链接(去除分享中的杂项)

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️如遇文章付费&#xff0c;可先看…

首套真题解析!安徽211难度适中!两门课!

这个系列会分享名校真题。并做详细解析&#xff01;此为24年第一套&#xff01; 今天分享的是22年合肥工业856的信号与系统试题及解析。 小马哥Tips&#xff1a; 本套试卷难度分析&#xff1a;本套试题内容难度中等&#xff0c;里面较多的考察了信号与系统的知识&#xff0c…

Nodejs-- 网络编程

网络编程 构建tcp服务 TCP tcp全名为传输控制协议。再osi模型中属于传输层协议。 tcp是面向连接的协议&#xff0c;在传输之前需要形成三次握手形成会话 只有会话形成了&#xff0c;服务端和客户端才能想发送数据&#xff0c;在创建会话的过程中&#xff0c;服务端和客户…

Mac vm虚拟机激活版:VMware Fusion Pro for Mac支持Monterey 1

相信之前使用过Win版系统的朋友们对这款VMware Fusion Pro for Mac应该都不会陌生&#xff0c;这款软件以其强大的功能和适配能力广受用户的好评&#xff0c;在Mac端也同样是一款最受用户欢迎之一的虚拟机软件&#xff0c;VM虚拟机mac版可以让您能够轻松的在Apple的macOS和Mac的…

Java(八)——String类

文章目录 String类String的构造及内存分布构造内存分布 常用方法判等比较查找转化替换拆分截取 字符串的不可变性StringBuilder和StringBuffer String类 C语言中没有专门的字符串类型&#xff0c;一般使用字符数组或字符指针表示字符串&#xff0c;而字符串的函数需要包含头文…

【云原生】Kubernetes----配置资源管理Secrets与ConfigMaps

目录 一、Secrets &#xff08;一&#xff09;Secrets概述 &#xff08;二&#xff09;Secrets类型 &#xff08;三&#xff09;Secrets使用方式 &#xff08;四&#xff09;创建Secrets 1.陈述式命令创建 1.1 定义用户与密码文件 1.2 使用陈述式命令创建 2.使用base6…

详解智慧互联网医院系统源码:开发医院小程序教学

本篇文章&#xff0c;笔者将详细介绍智慧互联网医院系统的源码结构&#xff0c;并提供开发医院小程序的详细教学。 一、智慧互联网医院系统概述 智慧互联网医院系统涵盖了预约挂号、在线咨询、电子病历、药品管理等多个模块。 二、系统源码结构解析 智慧互联网医院系统的源码…

OpenShift 4 - OpenShift Service Mesh 3 预览

《OpenShift / RHEL / DevSecOps 汇总目录》 了解 OpenShift Service Mesh 3 的变化 OpenShift Service Mesh 是一套在 OpenShift 上安装部署、跟踪监控 Istio 运行环境的实现。红帽在 2023 年底推出了技术预览版的 OpenShift Service Mesh 3&#xff0c;它和目前的 OpenShif…

IP代理池是什么?

从事跨境行业的朋友们总会有一个疑问&#xff0c;为什么自己所合作的IP代理商的IP在使用的过程中账号会有莫名封禁的问题&#xff0c;会不会是自己在使用的过程中错误的操作违反了平台的规则&#xff0c;其实不然有可能会是IP代理池纯净度不高的问题&#xff0c;有可能自己在使…

UI线程和工作线程

引用&#xff1a;windows程序员面试指南 工作线程 只处理逻辑的线程&#xff0c;例如&#xff1a;启动一个线程&#xff0c;用来做一个复杂的计算&#xff0c;计算完成之后&#xff0c;此线程就自动退出&#xff0c;这种线程称为工作线程 UI线程 Windows应用程序一般由窗口…

Ansible05-Ansible进阶(流程控制、Roles角色、加密优化调优等)

目录 写在前面7 Ansible 进阶7.1 流程控制7.1.1 handlers触发器与notify7.1.1.1 未使用handlers7.1.1.2 使用handlers 7.1.2 when判断7.1.2.1 when的语法7.1.2.2 when判断主机名选择模块输出7.1.2.3 when结合register变量 7.1.3 loop/with_items循环7.1.3.1 with_items案例7.1.…

本地公网IP是什么?

本地公网IP&#xff08;Public IP Address&#xff09;是指分配给计算机或设备的可在互联网上直接访问的唯一标识符。每个连接到互联网的设备都会被分配一个公网IP&#xff0c;用于与其他设备进行通信。本地公网IP在网络通信中起到了非常重要的作用&#xff0c;为用户提供了方便…

单实例11.2.0.3迁移到RAC11.2.0.4_使用RMAN 异机恢复

保命法则&#xff1a;先备份再操作&#xff0c;磁盘空间紧张无法备份就让满足&#xff0c;给自己留退路。 场景说明&#xff1a; 1.本文档的环境为同平台、不同版本&#xff08;操作系统版本可以不同&#xff0c;数据库小版本不同&#xff09;&#xff0c;源机器和目标机器部…

[数据集][目标检测]手枪检测数据集VOC+YOLO格式3000张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3000 标注数量(xml文件个数)&#xff1a;3000 标注数量(txt文件个数)&#xff1a;3000 标注…

STM32作业实现(七)OLED显示数据

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…

hadoop配置nfs,window映射nfs

1.修改hadoop配置如下内容,并同步到其它节点 core-site.xml新增配置项 <!-- 允许hadoop用户代理任何其它用户组 --><property><name>hadoop.proxyuser.hadoop.groups</name><value>*</value></property><!-- 允许代理任意服务器…

如何使用KolorPanotourPro制作全景图像网页

目录 前言 KolorPanotourPro是什么 如何制作全景网页 1.拥有全景图 2.导入图片 3.在多张全景图中跳转 4.查看制作的全景网页 结束语 前言 今天是坚持写博客的第十五天&#xff0c;继续为努力和坚持的大家点赞和鼓掌。 书接上文&#xff0c;我们讲了如何使用如何使用A…

【Vulhub】Fastjson 1.2.24_rce复现

文章目录 一&#xff0c;Fastjson是什么&#xff1f;二&#xff0c;fastjson漏洞原理三&#xff0c;判断是否有fastjson反序列化四&#xff0c;复现Fastjson 1.2.24_rce(vulhub)环境配置1.判断是否存在Fastjson反序列化2.反弹shell3.启动RMI服务器4.构造恶意POST请求 一&#x…

[数据集][目标检测]老鼠检测数据集VOC+YOLO格式4107张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4107 标注数量(xml文件个数)&#xff1a;4107 标注数量(txt文件个数)&#xff1a;4107 标注…