Java
约 1338 字大约 4 分钟 阅读量
2025-02-16
镜像标签
镜像可以省略 tag
,默认使用 latest
,例如:
itzg/minecraft-server
或显式指定 tag
,例如:
itzg/minecraft-server:<tag>
其中 <tag>
对应下表中的首列:
Tag | Java version | Linux | JVM Type | Architecture |
---|---|---|---|---|
latest | 21 | Ubuntu | Hotspot | amd64, arm64 |
stable | 21 | Ubuntu | Hotspot | amd64, arm64 |
java23 | 23 | Ubuntu | Hotspot | amd64, arm64 |
java23-graalvm | 23 | Oracle | Oracle GraalVM[1] | amd64, arm64 |
java21 | 21 | Ubuntu | Hotspot | amd64, arm64 |
java21-jdk | 21 | Ubuntu | Hotspot+JDK | amd64, arm64 |
java21-alpine | 21 | Alpine | Hotspot | amd64, arm64 |
java21-graalvm | 21 | Oracle | Oracle GraalVM[1:1] | amd64, arm64 |
java17 | 17 | Ubuntu | Hotspot | amd64, arm64, armv7 |
java17-graalvm | 17 | Oracle | Oracle GraalVM[1:2] | amd64, arm64 |
java17-alpine | 17 | Alpine | Hotspot | amd64 (1) |
java11 | 11 | Ubuntu | Hotspot | amd64, arm64, armv7 |
java8 | 8 | Ubuntu | Hotspot | amd64, arm64, armv7 |
java8-jdk | 8 | Ubuntu | Hotspot+JDK | amd64 |
java8-openj9 | 8 | Debian | OpenJ9 | amd64 |
java8-graalvm-ce | 8 | Oracle | GraalVM CE | amd64 |
- Java 17 Alpine 为何不支持 arm64?因基础镜像(如 elipse-temurin)未提供支持,建议改用 Ubuntu 基础镜像。
Java8 使用示例
使用 docker
运行下面命令
docker run -it -e EULA=true itzg/minecraft-server:java8
或者是在 compose 文件中定义
services:
mc:
image: itzg/minecraft-server:java8
"latest 标签"
latest
标签不仅包含最新功能和修复,还会随 Minecraft 官方要求自动升级至所需的最新 Java 版本。
"Class File Version"
若启动时出现 "class file version" 错误,请参考此表确认所需的 JDK/Java 版本。
稳定版本镜像
因为使用 latest
标签会随着最新镜像构建带来的新功能和错误修复发生变化,如需锁定特定构建版本,可以使用以下语法。
itzg/minecraft-server:<release>-<java tag>
其中 <java tag>
仍然指的是上表得第一列,<release>
可以参考 发布记录
例子
例如,Java 17 的 2024.4.0 版镜像为:
itzg/minecraft-server:2024.4.0-java17
stable 标签说明
stable
标签结合了 latest
的优点,始终执行最新发布的稳定版本。
版本兼容指南
Minecraft wiki 列出了原版服务端与所需 Java 版本的对应关系。
Class file version 65.0
若启动时出现如下错误,请确保已拉取最新镜像(使用 Java 21)或显式指定 itzg/minecraft-server:java21 标签。
Exception in thread "ServerMain" java.lang.UnsupportedClassVersionError: org/bukkit/craftbukkit/Main has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 61.0`
或者
Error: LinkageError occurred while loading main class net.minecraft.bundler.Main
java.lang.UnsupportedClassVersionError: net/minecraft/bundler/Main has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 61.0
Forge 版本
Forge 及其模组可能依赖特定 JVM 内部 API,故对 Java 版本有严格要求。
Java 21
部分 Minecraft 1.21 模组仍需 Java 17 环境。若遇到如下错误,请切换至 Java 17 标签镜像:
Caused by: org.spongepowered.asm.mixin.throwables.ClassMetadataNotFoundException: java.util.List
at MC-BOOTSTRAP/org.spongepowered.mixin/org.spongepowered.asm.mixin.transformer.MixinPreProcessorStandard.transformMethod(MixinPreProcessorStandard.java:754)
Java 8
Forge 1.18 以下版本必须使用 java8-multiarch 或其他 java8 系列镜像标签。
若启动失败日志出现以下内容,表明需切换至 Java 8 镜像:
Caused by: java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader
cannot be cast to class java.net.URLClassLoader
另请注意:Forge 不支持 openj9 JVM。
已弃用镜像标签
以下镜像标签已停止维护,建议及时迁移:
- java19
- adopt13
- adopt14
- adopt15
- openj9-nightly
- multiarch-latest
- java16/java16-openj9
- java17-graalvm-ce
- java17-openj9
- java20-graalvm, java20, java20-alpine
- java8-multiarch is still built and pushed, but please move to java8 instead
- java8-alpine
基于 Oracle GraalMV images,从 JDK 17 开始,现在处于 GraalVM Free License下,合并了之前 GraalVM Enterprise 的内容。 ↩︎ ↩︎ ↩︎