Docker部署Tomcat启动失败:--add-opens参数错误排查与解决
解决Tomcat 10容器启动失败:Unrecognised option --add-opens问题
问题原因
Tomcat 10.1.x版本要求Java 11或更高版本,你的Dockerfile中用yum install java-devel -y在UBI8系统上默认安装的是Java 8。--add-opens=java.base/java.lang=ALL-UNNAMED是Java 9及以上版本才支持的JVM参数,Java 8无法识别该参数,导致JVM启动失败。
另外原Dockerfile存在冗余操作:ADD命令会自动解压tar.gz格式文件,无需再执行RUN tar xfh ...;COPY Dockerfile /server属于无用操作,建议移除以减小镜像体积。
解决方案
方案一:安装Java 11(推荐)
修改Dockerfile,替换Java安装包为Java 11开发包,并清理冗余步骤:
FROM redhat/ubi8 MAINTAINER "Devil@gmail.com" RUN yum update -y # 安装Java 11开发包,满足Tomcat 10版本要求 RUN yum install java-11-openjdk-devel -y RUN yum install unzip -y RUN mkdir /server COPY apache-tomcat-10.1.19.tar.gz /server WORKDIR /server # ADD自动解压tar.gz,无需额外tar命令 ADD apache-tomcat-10.1.19.tar.gz /server CMD ["/server/apache-tomcat-10.1.19/bin/catalina.sh","run"] EXPOSE 8080 8085 8081
方案二:降级Tomcat版本(若必须使用Java 8)
如果业务依赖Java 8,需将Tomcat版本降级到9.x(Tomcat 10不再支持Java 8),修改Dockerfile中的Tomcat包并调整启动路径:
FROM redhat/ubi8 MAINTAINER "Devil@gmail.com" RUN yum update -y RUN yum install java-devel -y RUN yum install unzip -y RUN mkdir /server COPY apache-tomcat-9.0.80.tar.gz /server WORKDIR /server ADD apache-tomcat-9.0.80.tar.gz /server CMD ["/server/apache-tomcat-9.0.80/bin/catalina.sh","run"] EXPOSE 8080 8085 8081
验证步骤
- 重新构建镜像:
docker build -t tomcat-ubi8 .
- 启动容器:
docker run -d -p 8080:8080 --name t1 tomcat-ubi8
- 检查容器状态:
docker ps # 或查看日志确认无报错 docker logs t1
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

