我们有一个运行在docker容器中的Spring boot gradle项目,它使用一个docker卷。Spring devtools live reload特性与以下属性一起使用。
spring.devtools.restart.enabled=true
spring.devtools.restart.additional-paths=.
spring.devtools.restart.additional-exclude=src/main/java/**
我们正在使用docker卷来更改容器中的源文件。只要需要实时重新加载,文件src/main/resources/reload-trigger.txt
就会更新。
集装箱日志显示,重新装载工作,但变化不影响。在重新启动容器时,会反映更改。
FROM gradle:5.6.2-jdk8
WORKDIR /app
COPY . /app
RUN ./gradlew getDeps
EXPOSE 8000
CMD ["gradle", "bootRun", "-PskipDownload=true"]
Spring开发工具热重新加载机制仅从已构建的类文件重新加载/重新启动项目;它不会编译/构建源文件。因此在docker容器中,即使源文件被更改,Java类文件也不会被更改。因此,更改不会反映出来,新添加的GET API也不会发布。
当容器重新启动时,它再次调用DockerFile中指定的gradle bootrun
。这将把更改的Java文件构建为类文件,并且更改将被反映出来。
当我们在IDE中使用它时,IDE(默认情况下)会在更改时构建源文件。因此Spring hot reload总是加载更新的类文件,但这不会在IDE之外发生,除非我们有某种机制来监视源代码更改并构建它们,比如Gradle Build--continuout
# scan for trigger file from root
# trigger file should not be in classpath, or it will go to infinite build loop
spring.devtools.restart.additional-paths=.
spring.devtools.restart.trigger-file=reload-trigger.txt
DockerFile
FROM gradle:6.7-jdk11
WORKDIR /app
COPY . /app
EXPOSE 8000
# fetch dependencies
RUN chmod +x start.sh && gradle getDeps
# script which watches source file changes in background and executes bootRun
CMD ["sh", "start.sh"]
start.sh
这个文件应该在root中,因为Dockerfile不应该在classpath中
# buildAndReload task, running in background, watches for source changes
(sleep 60; gradle buildAndReload --continuous -PskipDownload=true -x Test)&
gradle bootRun -PskipDownload=true
# -----other codes above----- #
task buildAndReload {
dependsOn build
mustRunAfter build // buildAndReload must run after the source files are built into class files using build task
doLast {
new File(".", "reload-trigger.txt").text = "${System.currentTimeMillis()}" // update trigger file in root folder for hot reload
}
}
我在Centos7机器上安装了Docker,DNS不能在容器中工作。 因此,如果我在主机上运行,它将正确解析。但是,如果我执行,我会得到: 更新:这不仅发生在busybox上,在其他平台上也是如此。我的主要问题是无法运行从以下DockerFile构建的映像容器: docker-compose.yml: 这项服务运行良好,并在我的个人机器上运行最新的Ubuntu进行了测试
在使用cypress cucumber预处理器时,我的package.json中有以下内容 当我运行npm时,运行ci-test,它可以工作,所有使用@othertag的场景都会被忽略。 但却找不到任何标记。
我部署了Jenkins helm的2.319.3版本,但我对集装箱码头工人有一个陌生的问题。我的Kubernetes版本:1.22.6(aks)。 错误: docker build-tregistry.azurecr.io/test: Developate-v81。无法连接到unix://var/run/的Docker守护进程docker.sock.docker守护进程正在运行吗? 测试另一个do
问题内容: 我想在一个简单的Docker容器中运行Django。 首先,我使用Docker-file构建了我的容器。没有什么特别的(只有FROM,RUN和COPY命令) 然后我用命令运行容器 输入我的容器: 运行Django服务器: 得到了: 但是当我转到127.0.0.1:8000时,我什么也看不到: 没有Nginx或其他工作服务器。 我究竟做错了什么? 更新1(Dockerfile) 问题答案
连接到数据库 我在那里没有看到任何桌子,除了原木 我查看了日志,changelog已经在那里工作,并且已经创建了表。
问题内容: 我有这个Docker Compose配置,我只需创建一个NodeJS容器并在其中安装Angular CLI。 之后,我可以使用SSH在容器内进行SSH 。可以正常工作,但似乎不起作用。它已正确启动,控制台中没有错误。但是,如果我访问(我将端口4200映射到80),则不会加载任何内容。 我想念什么吗? 问题答案: 在您的Dockerfile中,您缺少Expose行,例如: 尝试将其放在d