java - 如何在 Docker 容器和任何 IDE 中使用 Spring Boot 进行开发
问题描述
我使用 docker-compose 来启动不同的 Spring Boot 应用程序。
我的 docker 图像是用这种定义的Dockerfile
:
FROM openjdk:8-jdk-alpine
ADD app.jar app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]
但是,我希望在mvn spring-boot:run
不依赖特定 IDE 的情况下从调试和热重载功能中受益。
在不依赖特定 IDE 的情况下,在 Docker 容器中使用 Spring Boot 完成调试和热重载的最佳方法是什么?
笔记:
- 我的源文件被构建到一个 jar(使用 Maven)中,该 jar 被复制到包含我的 Docker 图像定义的不同位置;这意味着我的源文件不在 docker 映像中。
- 我想在 Docker 容器中开发的原因是我的应用程序相互依赖,并且是在 docker-compose 环境中配置的,所以我不能轻易地在 docker 网络和环境之外单独运行一个应用程序。
我想在docker容器中安装一个包含我的spring boot项目的卷,然后mvn spring-boot:run
在容器中使用;但我无法阻止 maven 从 Internet 下载所有依赖项(我尝试指定一个包含我所有依赖项的本地存储库但没有成功)。我想知道这是否是一个不错的解决方案以及如何使其发挥作用。
解决方案
按照您的思路,您可以尝试将依赖项从卷复制到项目容器中,然后以如下方式使用离线模式:
FROM openjdk:8-jdk-alpine
WORKDIR /app
# copy the Project Object Model file
COPY ./pom.xml ./pom.xml
# copy your dependencies
COPY app.jar app.jar
# copy your other files
COPY ./src ./src
# Set fetch mode to offline to avoid downloading them from the internet
RUN mvn dependency:go-offline
显然,也可以通过在 ~/.m2/settings.xml 文件中设置离线属性来全局配置离线模式,您可以设置它并复制您的 m2 文件并在运行容器时引用它
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<offline>true</offline>
</settings>
mvn -Dmaven.repo.local=~/.m2/settings.xml ...
您可以在这里找到更多信息:
推荐阅读
- r - 使用 For 循环创建具有增量后缀的多个对象,然后将 .csv 文件读入每个新对象(也具有增量后缀)
- reactjs - 将 Recharts 导入 Rollup、Typescript、React 项目时遇到问题
- c# - EFCore 3 动态数据库集
- javascript - React-hook setState 无法按预期工作
- c++ - 这些代码库之间有什么不同吗?
- python - REST API 控制器是否应该包含有关分解请求主体的逻辑?
- swiftui - 具有 ObservableObject 属性的 ObservableObject 未触发 SwiftUI 更新
- sql - 如果前一列值不为空,则更新表中的下一列
- environment-variables - 如何在 Gatsby 应用程序的 .env 文件中指定 URL?
- import - 在 Python3 中导入相邻模块