抄一份老教程写 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
我的推荐路线
按业务需求排序:
- 能升 JDK 8 就直接升——
tomcat:7.0.109-jdk8,80% 情况没兼容问题 - 必须 Java 7 且是内网/开发环境——用 Alpine 自建 Dockerfile
- 老 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 6 | 50 |
| Java 7 | 51 |
| Java 8 | 52 |
| Java 11 | 55 |
| Java 17 | 61 |
| Java 21 | 65 |
一句话总结
tomcat:7.0-jre7 已经从官方镜像库消失。首选 tomcat:7.0.109-jdk8,非要 Java 7 就自己拼 Alpine 镜像,社区镜像只做兜底。
