OhMyMCOhMyMC
Version

Java

11 次阅读

镜像标签

镜像可以省略 tag,默认使用 latest ,例如:

itzg/minecraft-server

或显式指定 tag,例如:

itzg/minecraft-server:<tag>

其中 <tag> 对应下表中的首列:

TagJava versionLinuxJVM TypeArchitecture
latest21UbuntuHotspotamd64, arm64
stable21UbuntuHotspotamd64, arm64
java2323UbuntuHotspotamd64, arm64
java23-graalvm23OracleOracle GraalVM1amd64, arm64
java2121UbuntuHotspotamd64, arm64
java21-jdk21UbuntuHotspot+JDKamd64, arm64
java21-alpine21AlpineHotspotamd64, arm64
java21-graalvm21OracleOracle GraalVM1amd64, arm64
java1717UbuntuHotspotamd64, arm64, armv7
java17-graalvm17OracleOracle GraalVM1amd64, arm64
java17-alpine17AlpineHotspotamd64 (1)
java1111UbuntuHotspotamd64, arm64, armv7
java88UbuntuHotspotamd64, arm64, armv7
java8-jdk8UbuntuHotspot+JDKamd64
java8-openj98DebianOpenJ9amd64
java8-graalvm-ce8OracleGraalVM CEamd64
  1. Java 17 Alpine 为何不支持 arm64?因基础镜像(如 elipse-temurin)未提供支持,建议改用 Ubuntu 基础镜像。

Java8 使用示例

使用 docker 运行下面命令

docker run -it -e EULA=true itzg/minecraft-server:java8

或者是在 compose 文件中定义

docker-compose.yml
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

Footnotes

  1. 基于 Oracle GraalMV images,从 JDK 17 开始,现在处于 GraalVM Free License下,合并了之前 GraalVM Enterprise 的内容。 2 3

最后更新于