讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在Java中使用Docker搭建环境_Java容器化开发环境说明

浅丽大大_7570

浅丽大大_7570

发布时间:2026-02-05 05:47:35

|

1081人浏览过

|

来源于php中文网

原创

优先选 eclipse-temurin(如 eclipse-temurin:17-jre-jammy),因其轻量、定期更新CVE、支持ARM64;避免已弃用的 java:8 或体积大且无多阶段构建支持的 openjdk 官方镜像。

如何在java中使用docker搭建环境_java容器化开发环境说明

Java应用打包成Docker镜像时,Dockerfile里该用哪个JDK基础镜像

优先选 eclipse-temurin(原 adoptopenjdk),不是 openjdk 官方镜像,也不是 java:8-jdk 这类已弃用的旧标签。后者在 Docker Hub 上已标记为 deprecated,且不更新安全补丁。

常见错误是直接写 FROM openjdk:17-jdk-slim —— 它虽能跑,但镜像体积大、无多阶段构建支持、底层 OS 包管理混乱。而 eclipse-temurin:17-jre-jammy 更轻量、定期扫描 CVE、支持 ARM64。

  • eclipse-temurin:17-jre-jammy:适合 Spring Boot 打包成 jar 后直接运行,体积约 120MB
  • eclipse-temurin:17-jdk-jammy:需要编译或调试时才用,比如集成 Jacoco 或运行 javac
  • 避免 FROM java:8:该镜像基于 Debian Jessie,2020 年已 EOL,存在已知 SSL/TLS 握手失败问题

Spring Boot应用构建Docker镜像时,为什么java -jar启动失败报ClassNotFoundException

根本原因不是类没打进 jar,而是 Docker 构建时用了错误的 COPY 路径,或者没跳过 Maven 的 test 阶段导致 fat jar 没生成。

典型错误:COPY target/*.jar app.jar 在多模块项目中会匹配到空目录或 pom.xml 生成的非可执行 jar;正确做法是明确指定构建产物名。

立即学习“Java免费学习笔记(深入)”;

Windows-Android_SSH_Remote_Control
Windows-Android_SSH_Remote_Control

通过 SSH 隧道从 Android 设备在互联网上对 Windows PC 实现完整远程控制的设置与使用指南,适用于远程桌面访问、安全 RDP 等。

下载
  • 确保 mvn clean package -DskipTests 成功执行,检查 target/your-app-0.0.1-SNAPSHOT.jar 是否存在且可执行(java -jar 能打印 help)
  • Dockerfile 中用精确路径:COPY target/your-app-*.jar app.jar,别依赖通配符匹配
  • 若用 Spring Boot 3+,需确认 jar 内 META-INF/MANIFEST.MF 含 Start-Class 和 Spring-Boot-Classes,否则 java -jar 不识别为 Boot 应用

容器内Java进程无法被docker stop优雅终止,怎么修复

因为 Java 进程没收到 SIGTERM,或收到后未注册 shutdown hook,导致 docker stop 等 10 秒后强制发 SIGKILL,数据库连接、线程池、Actuator 的 /actuator/shutdown 全部失效。

关键点:必须让 JVM 成为 PID 1,且不被 shell 封装。错误写法:ENTRYPOINT ["sh", "-c", "java -jar app.jar"] —— 此时 sh 是 PID 1,Java 是子进程,SIGTERM 只发给 sh,不会透传。

  • 正确写法:ENTRYPOINT ["java", "-jar", "/app.jar"](exec form)
  • 加 JVM 参数确保信号处理:-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0,避免 OOMKilled
  • Spring Boot 项目中显式注册 hook:
    Runtime.getRuntime().addShutdownHook(new Thread(() -> { logger.info("Shutting down gracefully..."); }));

本地开发时用docker-compose连MySQL,Java应用总是连不上host.docker.internal

这个 DNS 名在 macOS / Windows 的 Docker Desktop 默认可用,但在 Linux 上默认不存在,直接导致 Connection refused。不能靠改 /etc/hosts 硬编码 IP,因为容器网络每次重启可能变。

根本解法是让 Java 应用和 MySQL 同属一个自定义网络,并用服务名通信 —— 这才是 Docker 原生推荐方式,不是 hack。

  • 删掉所有 host.docker.internal 引用,把 JDBC URL 改成 jdbc:mysql://mysql:3306/mydb
  • docker-compose.yml 中定义 mysql 服务,并与应用服务同级,不加 network_mode: host
  • 验证方法:docker-compose exec app ping mysql,能通说明网络就绪
Java 容器化最常卡住的地方,其实是“以为自己在用 Docker”,实际还在用本地端口、本地配置、本地 JDK 路径思维去套容器——结果就是日志里满屏 Connection refused、FileNotFoundException、OutOfMemoryError,但容器本身明明显示 running。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2333

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1419

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

835

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3272

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

5568

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1219

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5831

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

5082

2023.08.14

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

20

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 190人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn