【发布时间】:2020-05-16 20:37:50
【问题描述】:
我创建了一个 spring starter 项目,其中 gradle 作为依赖项管理器,还包括 spring-boot-dev-tools。我的目标是创建一个 docker 映像,以便在我更改 docker 容器内的 java 文件时必须有 live reload。这适用于以下配置。
Dockerfile
FROM gradle:5.6.2-jdk8
WORKDIR /app
COPY . /app
RUN gradle build
EXPOSE 8080
CMD ["sh", "start.sh"]
start.sh
#!/bin/bash
gradle --version
gradle build --continuous &
gradle bootRun
这是有效的
我的一个控制器文件如下。
@RestController
public class MainController {
@GetMapping("/")
String test() {
return "Test Success";
}
}
导航到localhost:8080 时在浏览器中获得“测试成功”。当 docker 容器内的文件 /app/.../MainController.java 更改为 return "Updated"; 时,更改会自动生效。
这是问题
即使Dockerfile中有RUN gradle build,由于gradle build --continuous或gradle bootRun的命令,带有此图像的docker run命令似乎正在再次下载gradle依赖项。
我希望docker run 命令快,就像它已经下载了所有依赖项一样。请提出解决方法。需要实时重新加载。
【问题讨论】:
-
您是否尝试过将主机中的 ~/.gradle 文件夹映射到容器中的 /root/.gradle ?
-
@JonathP 感谢您的支持。我已经解决了这个问题,但忘记发布答案。通过从主机映射 gradle 依赖关系,将在那里创建对主机的依赖关系,并且 Docker 映像将无法在没有 gradle 的主机上运行。
标签: spring-boot docker gradle dockerfile