尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
微服务:doucker 热部署
答案是不一定能直接看到变化取决于你是否开启了热重载--reload。因为你的容器是通过-v $(PWD):/app挂载运行的所以容器内的main.py确实已经同步成了你修改后的代码文件变了。但是Uvicorn 默认只在启动时读取一次代码。除非你专门加了--reload参数否则正在运行的老进程不会自动加载新代码。 先确认你的容器是否开启了热重载执行以下命令查看容器的启动命令dockerps--no-trunc|findstr my-api或者直接查看日志看是否有reload字样dockerlogs my-api如果看到--reload直接刷新浏览器http://localhost:8000代码就生效了。如果没有--reload需要执行下面的操作。️ 方案一直接重启容器最简单立刻生效既然代码已经挂载进去了只需重启容器让进程重新加载即可dockerrestart my-api重启后大约 1-2 秒刷新浏览器新代码就会生效。️ 方案二开启热重载一劳永逸以后改代码自动生效如果你希望以后修改代码后无需重启容器自动生效需要让 Uvicorn 带上--reload参数。方法 A删除旧容器重新运行覆盖启动命令dockerrm-fmy-apidockerrun-d-p8000:8000--namemy-api-v${PWD}:/appmy-fastapi-app uvicorn main:app--host0.0.0.0--port8000--reload方法 B修改 Dockerfile推荐以后构建镜像默认开启修改Dockerfile的最后一行加上--reloadCMD [uvicorn, main:app, --host, 0.0.0.0, --port, 8000, --reload]然后重新构建镜像注意这一步会重建镜像但只是为了改默认启动命令dockerbuild-tmy-fastapi-app.dockerrm-fmy-apidockerrun-d-p8000:8000--namemy-api-v${PWD}:/appmy-fastapi-app之后你每次修改main.py并保存文件终端日志会显示Reloading...浏览器刷新就能看到最新效果。 总结建议不想折腾直接执行docker restart my-api然后刷新浏览器就能看到最新代码。想长期省事采用方案二加上--reload以后开发就非常丝滑了。你现在可以先试试docker restart my-api看看修改是否生效然后告诉我结果如果重启后报错或者访问不了把docker logs my-api的日志发我看看。太好了毫秒镜像可用这意味着你的 Docker 网络环境已经完全打通可以顺利拉取镜像了。现在给你一份完整的、可直接操作的 Spring Boot Docker 部署指南包含了从项目创建到容器运行的全过程所有配置都基于已验证可用的docker.1ms.run镜像源。 Spring Boot Docker 完整部署指南Windows / 毫秒镜像 第一步创建 Spring Boot 项目没有 IDEA 插件也行方案 A使用 Spring Initializr 网站推荐无需插件打开浏览器访问 https://start.spring.io填写如下选项ProjectMavenLanguageJavaSpring Boot选择最新稳定版如 3.4.0Groupcom.exampleArtifactdemoDependencies勾选Spring Web点击GENERATE下载压缩包解压到工作目录如D:\codding\java-docker方案 B手动创建 Maven 项目如果不想用网站在D:\codding\java-docker下创建pom.xml内容使用你之前提供的模板Spring Boot 3.2.0 及以上并添加 Spring Web 依赖。 第二步编写 Controller提供访问入口在src/main/java/com/example/demo/下创建HelloController.javapackagecom.example.demo;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;RestControllerpublicclassHelloController{GetMapping(/)publicStringhome(){returnHello Docker! Java Spring Boot is running with 1ms mirror!;}}确保DemoApplication.java启动类存在通常自动生成无需修改。{“registry-mirrors”: [“https://docker.1ms.run”]} 第三步在项目根目录创建 Dockerfile在D:\codding\java-docker即pom.xml所在目录下创建文件Dockerfile无扩展名内容如下# 使用毫秒镜像代理的 OpenJDK 17已验证可用 FROM docker.1ms.run/library/openjdk:17-jdk-slim # 设置工作目录 WORKDIR /app # 复制 Maven 打包后的 JAR 文件 COPY target/*.jar app.jar # 暴露端口 EXPOSE 8080 # 启动命令 ENTRYPOINT [java, -jar, app.jar]注意这里写的是docker.1ms.run/library/openjdk:17-jdk-slim因为毫秒镜像代理了 Docker Hub 的官方仓库用/library/前缀可以明确指向官方镜像。 第四步Maven 打包在项目根目录打开终端PowerShell 或 CMD执行mvn clean package-DskipTests如果提示mvn找不到可以使用 IDEA 右侧的 Maven 面板双击Lifecycle→clean再双击package。打包成功后在target目录下会生成demo-0.0.1-SNAPSHOT.jar或类似名字。️ 第五步构建 Docker 镜像dockerbuild-tmy-springboot-app:v1.执行后你会看到 Docker 从docker.1ms.run拉取基础镜像然后复制 JAR 包最后构建成功。 第六步运行容器dockerrun-d-p8080:8080--namemy-app my-springboot-app:v1-d后台运行-p 8080:8080宿主机 8080 映射到容器 8080--name my-app容器命名✅ 第七步验证访问打开浏览器访问http://localhost:8080页面应显示Hello Docker! Java Spring Boot is running with 1ms mirror!同时可以查看容器日志确认启动成功dockerlogs my-app 开发模式代码修改后快速更新如果你频繁修改代码可以每次执行mvn clean package-DskipTestsdockerrestart my-app刷新浏览器即可看到新内容。如果需要自动热重载可以配置 Spring Boot DevTools参考之前说明但简单的restart已经足够。 常用管理命令目的命令查看运行中的容器docker ps查看所有容器含停止的docker ps -a停止容器docker stop my-app启动已停止的容器docker start my-app删除容器需先停止docker rm my-app删除镜像docker rmi my-springboot-app:v1查看容器日志实时docker logs -f my-app进入容器内部调试docker exec -it my-app /bin/bash 清理环境如果需要重来dockerstop my-appdockerrmmy-appdockerrmi my-springboot-app:v1 总结你现在已经掌握了创建 Spring Boot 项目编写 Dockerfile使用毫秒镜像代理使用 Maven 打包构建并运行 Docker 容器访问验证和日常操作这套流程适用于所有基于 Spring Boot 的 Java 微服务项目你只需要替换 JAR 包名称和端口即可适应不同项目。如果后续你想学习Docker Compose 编排多服务如 MySQL、Redis或部署到云服务器随时可以继续问我。现在先去试试你的 Java 应用在 Docker 里跑起来吧好的既然你已经成功运行了基础版本现在我们来升级成**支持热部署Hot Reload**的开发模式。这样你修改 Java 代码后无需手动重启容器应用会自动重启并加载新代码大大提升开发效率。 热部署方案选择有两种常见方案按复杂度从低到高排列方案做法优点缺点方案一挂载 JAR 手动重启修改代码 →mvn package→docker restart简单、无需额外配置每次都要手动执行两条命令方案二挂载源码 mvn spring-boot:run容器内用 Maven 运行修改代码自动重启真正的热部署改完保存即生效容器体积较大启动稍慢推荐方案二因为它能真正实现“改代码 → 刷新浏览器 → 立即看到变化”的流畅开发体验。 方案二实现真正的热部署推荐1️⃣ 修改pom.xml添加 Spring Boot DevTools 依赖在dependencies标签内加入dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdscoperuntime/scopeoptionaltrue/optional/dependency保存后Maven 会自动下载该依赖。2️⃣ 创建一个开发用的Dockerfile.dev在项目根目录新建文件Dockerfile.dev与Dockerfile区分开内容如下# 使用包含 Maven 和 JDK 的镜像开发用 FROM docker.1ms.run/library/maven:3.8-openjdk-17 # 设置工作目录 WORKDIR /app # 将 Maven 的本地仓库挂载到容器外避免每次重建下载依赖由 docker run 挂载 # 复制 pom.xml 并下载依赖利用 Docker 缓存 COPY pom.xml . RUN mvn dependency:go-offline # 复制源代码 COPY src ./src # 暴露端口 EXPOSE 8080 # 启动 Spring Boot 开发模式带 DevTools 热重启 CMD [mvn, spring-boot:run]注意这个镜像较大约 500MB但只在开发阶段使用不影响生产镜像。3️⃣ 构建开发镜像dockerbuild-fDockerfile.dev-tmy-springboot-dev.4️⃣ 运行开发容器挂载源码和 Maven 仓库关键必须把宿主机上的源码目录和 Maven 本地仓库挂载进去这样修改代码后容器内的 Maven 能重新编译。dockerrun-d-p8080:8080--namemy-app-dev-v${PWD}:/app-v$HOME/.m2:/root/.m2 my-springboot-dev-v ${PWD}:/app将当前项目目录挂载到容器/app使源码同步。-v $HOME/.m2:/root/.m2复用宿主机 Maven 本地仓库避免重复下载依赖。如果你在PowerShell中使用${PWD}和$HOME如果在CMD中请改用%cd%和%USERPROFILE%。5️⃣ 验证热部署访问http://localhost:8080看到初始内容。修改HelloController.java中的返回字符串比如改成Hello Hot Reload!。保存文件观察容器日志docker logs -f my-app-dev你会看到类似输出Started DemoApplication in 2.345 seconds (JVM running for 3.123)说明应用已自动重启。刷新浏览器新内容立即显示。 日常开发操作指南修改代码后无需任何命令保存即生效DevTools 会监听变化并自动重启。新增依赖修改pom.xml后需重新构建镜像因为RUN mvn dependency:go-offline在镜像构建时执行。执行dockerbuild-fDockerfile.dev-tmy-springboot-dev.dockerrm-fmy-app-devdockerrun-d-p8080:8080--namemy-app-dev-v${PWD}:/app-v$HOME/.m2:/root/.m2my-springboot-dev清理容器和镜像dockerrm-fmy-app-devdockerrmi my-springboot-dev 方案一轻量级热重启如果不想用开发镜像如果你希望保持镜像小沿用生产镜像但想要半自动热部署可以用挂载 JAR 包的方式修改代码后在宿主机执行mvn clean package-DskipTests然后重启容器dockerrestart my-app刷新浏览器看到变化。这种方式虽然多了一步但镜像体积小约 300MB适合资源有限的环境。 两种方案对比总结特性方案一挂载 JAR 重启方案二开发镜像 Maven 运行镜像大小~300 MB~600 MB热部署方式手动执行mvn packagedocker restart保存代码自动重启适用场景生产调试、资源紧张日常开发、频繁修改代码初始启动速度快直接运行 JAR稍慢需启动 Maven 现在你可以选择如果想体验真正无缝的热部署按照“方案二”操作创建Dockerfile.dev并运行。如果觉得手动重启也能接受继续使用你已有的Dockerfile配合mvn package和docker restart。我建议你先用方案二体验一下“改代码 → 刷新浏览器”的丝滑感觉这会显著提升开发效率。之后如果需要生产部署再切回精简的生产镜像即可。如果你在操作中遇到任何问题比如挂载路径不对、权限错误等随时告诉我我会帮你调整。
RELATED

相关推荐

AD5593R与PIC18F96J65硬件协同设计与应用

AD5593R与PIC18F96J65硬件协同设计与应用

1. AD5593R与PIC18F96J65的硬件协同设计 1.1 AD5593R的核心特性解析 AD5593R这颗芯片最吸引人的地方在于它的多功能引脚配置。每个引脚都可以独立设置为DAC输出、ADC输入、数字输入或数字输出模式。当配置为DAC输出时,12位分辨率可以提供0-VREF或0-2VREF的输出范围…

📅 2026/10/6 22:22:40
KubePi V2版本发布:多集群管理体验全面升级

KubePi V2版本发布:多集群管理体验全面升级

2026年7月3日,飞致云旗下KubePi开源多集群管理面板项目发布V2版本。KubePi是1Panel官方出品的Kubernetes多集群管理面板,帮助管理员统一接入多个Kubernetes集群,并且通过权限控制,将不同集群、命名空间的访问权限分配给指定用户。…

📅 2026/9/8 23:19:08
模型评估深度解析:PAI-Bench指标如何衡量Cosmos-Predict2.5性能

模型评估深度解析:PAI-Bench指标如何衡量Cosmos-Predict2.5性能

模型评估深度解析:PAI-Bench指标如何衡量Cosmos-Predict2.5性能 【免费下载链接】Cosmos-Predict2.5-14B 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/Cosmos-Predict2.5-14B Cosmos-Predict2.5是NVIDIA推出的基于扩散模型的世界基础模型套件&…

📅 2026/10/6 11:43:42
MORE NEWS

更多资讯

📰

GPU加速TTI正演与逆时偏移:CUDA实现与ADCIGS生成

简介:面向地震波场模拟与高性能计算方向的研究者与工程师,这份资源聚焦二维TTI各向异性介质下的有限差分正演与逆时偏移实现,并借助CUDA将计算密集的波场传播与成像过程迁移到GPU并行加速,适合已具备波动方程与有限差分基础、希望…

📰

PFMEA入门实战:从过程流程图到控制计划的完整指南

简介:这是一份面向制造业质量工程师、工艺开发人员及质量管理入门者的PFMEA培训课件,聚焦过程潜在失效模式及后果分析这一核心工具,帮助读者理解并掌握过程风险识别、评估与改善的完整方法。资源包内含1个PPT文件,压缩包约581KB&a…

📰

【贪心交换排序】题解:P11376 [GESP202412 六级] 运送物资_贪心模型_排序_模拟_C++算法竞赛

文章目录题目描述题解时间限制1.00s内存限制512.00MB提供者沉石鱼惊旋难度普及/提高−标签贪心排序GESP2024题目描述 小杨管理着 mmm 辆货车,每辆货车每天需要向 A 市和 B 市运送若干次物资。小杨同时拥有 nnn 个运输站点,这些站点位于 A 市和 B 市之间…

📰

【CPU】Hypervisor 中 LHP / LWP 问题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

开拓者:正义之怒 职业构建:3步走完开卡到毕业

开拓者:正义之怒 职业构建:3步走完开卡到毕业 【免费下载链接】Wotr-BD-LR 正义之怒Wotr主角BD搜集 项目地址: https://gitcode.com/GitHub_Trending/wo/Wotr-BD-LR 本文是 开拓者:正义之怒 职业构建 实战攻略,基于 Wotr-B…

📰

[Web3] 去中心化基石 - BIP铁三角(BIP32/39/44)

🏗️ 去中心化的身份基石:BIP 铁三角(BIP32 / BIP39 / BIP44) 很多年前,我们初次接触互联网或社会时,总是需要向中心化机构“申请身份”: 👤 注册 QQ 账号、游戏账号;&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬