tomcat:7.0-jre7 镜像不存在了?三条替代路

抄一份老教程写 Dockerfile:

FROM tomcat:7.0-jre7
Error response from daemon: manifest for tomcat:7.0-jre7 not found

不是拼错了——Docker Hub 官方镜像库把老 tag 清掉了,尤其 Java 7 / Tomcat 7 / 旧 Debian 基础镜像这些 EOL 很久的组合。

现状

Docker Hub 上现在能拉到的 Tomcat 7

docker pull tomcat:7.0.109-jdk8         # 最后一个 7.x + JDK 8
docker pull tomcat:7.0.109-jdk8-openjdk
docker pull tomcat:7.0.103              # 老一点的备选

拉不到的:所有 -jre7 tag。Java 7 的 openjdk 基础镜像早就下架,官方 tomcat 镜像自然也不能再基于它构建。

方案一:换用 JDK 8(推荐)

绝大多数 Servlet 2.5 项目 JDK 8 兼容良好:

FROM tomcat:7.0.109-jdk8

COPY target/myapp.war /usr/local/tomcat/webapps/ROOT.war

EXPOSE 8080
CMD ["catalina.sh", "run"]

大多数老项目这样跑就好。只有极少数依赖 Java 7 特有行为的(比如 SSL cipher 顺序、某些反射细节),才需要坚持 Java 7。

方案二:自己构建 JRE 7 + Tomcat 7 镜像

必须坚持 Java 7 的情况,自己拼一个。Alpine 有历史包

FROM alpine:3.10

# Java 7 需要 32-bit 兼容层
RUN apk add --no-cache openjdk7-jre wget tar

ENV TOMCAT_VERSION=7.0.109
ENV CATALINA_HOME=/usr/local/tomcat
ENV PATH=$CATALINA_HOME/bin:$PATH

RUN wget -q https://archive.apache.org/dist/tomcat/tomcat-7/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz \
 && tar -xzf apache-tomcat-${TOMCAT_VERSION}.tar.gz -C /usr/local \
 && mv /usr/local/apache-tomcat-${TOMCAT_VERSION} $CATALINA_HOME \
 && rm apache-tomcat-${TOMCAT_VERSION}.tar.gz

EXPOSE 8080
CMD ["catalina.sh", "run"]

Alpine 3.10 的 openjdk7-jre 包还能装。更新的 Alpine 都下架了 Java 7。

或者用 Eclipse Temurin 归档(Adoptium 前身):

FROM eclipse-temurin:7-jre-focal

但目前 Adoptium 也不再维护 7.x 镜像,能拉到什么看运气。

方案三:第三方社区镜像

Docker Hub 上有些几年没维护的社区镜像还挂着:

docker pull consol/tomcat-7.0

这个镜像里是 Tomcat 7 + OpenJDK 7。缺点:

  • 9 年没更新,安全性堪忧
  • 只适合内网 / 本地测试
  • 生产用必须盯着 CVE

我的推荐路线

按业务需求排序:

  1. 能升 JDK 8 就直接升——tomcat:7.0.109-jdk8,80% 情况没兼容问题
  2. 必须 Java 7 且是内网/开发环境——用 Alpine 自建 Dockerfile
  3. 老 DSpace / 学术软件之类死绑 Java 7 的项目——尝试 consol/tomcat-7.0 或者自己拼

迁移信号

看到这些错误就是要升级 JDK 了:

Unsupported major.minor version 52.0     # class 是 JDK 8 编译的,JRE 7 跑不了

反过来:

Unsupported major.minor version 51.0     # class 是 JDK 7 编译的,JRE 6 跑不了

老 JAR 里 class 版本对应表:

Java 版本class version
Java 650
Java 751
Java 852
Java 1155
Java 1761
Java 2165

一句话总结

tomcat:7.0-jre7 已经从官方镜像库消失。首选 tomcat:7.0.109-jdk8,非要 Java 7 就自己拼 Alpine 镜像,社区镜像只做兜底。