同一个tomcat 镜像,有的机器上docker run 报错


昨天我自己build 一个web 应用镜像, 基于 tomcat:8.0,
Dockerfile 如下:
FROM tomcat:8.0

ADD project.war /tmp/
RUN unzip -o /tmp/project.war -d /usr/local/tomcat/webapps/ROOT/ && rm -f /tmp/project.war

docker build -t tomcat-web:1.0 .
build镜像成功之后,docker run , 可以正常访问 web
docker run -d -p 10115:8080 --name=tom tomcat-web:1.0

但是今天 换了一台机器 ,同样的 命令 run 这个镜像。
tomcat 就有错误,访问web 得到 404 错误
错误如下:
cat localhost.2016-04-13.log

Caused by: java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError. See also http://www.slf4j.org/codes.htm ... nLoop for more details.
at org.apache.log4j.Log4jLoggerFactory.<clinit>(Log4jLoggerFactory.java:5

..
13-Apr-2016 05:12:30.564 INFO org.apache.catalina.core.ApplicationContext.log Closing Spring root WebApplicationContext

两个机器上的 docker 都是 同样的版本1.8.2,同一个镜像,运行结果为什么会不同呢?
已邀请:

subchen

赞同来自:


按理应该都会出错,log4j-over-slf4j.jar AND slf4j-log4j12.jar 不能共存。

&amp;amp;lt;ol&amp;amp;gt;&amp;amp;lt;li&amp;amp;gt;检查两台机器的 base image (tomcat:8.0) 是否一致,有没有用第三方或者自己编译的 base image&amp;amp;lt;/li&amp;amp;gt;&amp;amp;lt;li&amp;amp;gt;两台机器的内存配置不一样,导致StackOverflowError没有在第一台机器立刻报出来。&amp;amp;lt;/li&amp;amp;gt;&amp;amp;lt;/ol&amp;amp;gt;

tomas3278

赞同来自:


谢谢 @subchen 的解答。删除 slf4j-log4j12.jar 就不会有 问题了。
log4j-over-slf4j.jar AND slf4j-log4j12.jar 两个包有循环依赖,导致StackOverflowError
可能是 第一台机器的 free 内存比较大,所以没有报错。

要回复问题请先登录注册