Docker Tomcat7容器并不总是正确启动

我正在做一些与Docker的testing,我有问题来启动我的tomcat7容器,它有时会正确启动,有时不会。 这里有几个尝试的例子

fred@fred-Latitude-E6520:~/docker/test2$ docker.io run tomcat7 * Starting Tomcat servlet engine tomcat7 ...done. May 04, 2014 5:31:19 PM org.apache.catalina.core.StandardService startInternal INFO: Starting service Catalina May 04, 2014 5:31:19 PM org.apache.catalina.core.StandardEngine startInternal INFO: Starting Servlet Engine: Apache Tomcat/7.0.52 (Ubuntu) May 04, 2014 5:31:19 PM org.apache.catalina.startup.HostConfig deployDirectory INFO: Deploying web application directory /var/lib/tomcat7/webapps/ROOT May 04, 2014 5:31:20 PM org.apache.coyote.AbstractProtocol start INFO: Starting ProtocolHandler ["http-bio-8080"] May 04, 2014 5:31:20 PM org.apache.catalina.startup.Catalina start INFO: Server startup in 886 ms fred@fred-Latitude-E6520:~/docker/test2$ docker.io run tomcat7 * Starting Tomcat servlet engine tomcat7 ...fail! fred@fred-Latitude-E6520:~/docker/test2$ docker.io run tomcat7 * Starting Tomcat servlet engine tomcat7 ...fail! fred@fred-Latitude-E6520:~/docker/test2$ docker.io run tomcat7 * Starting Tomcat servlet engine tomcat7 ...done. May 04, 2014 5:32:04 PM org.apache.catalina.core.StandardService startInternal INFO: Starting service Catalina May 04, 2014 5:32:04 PM org.apache.catalina.core.StandardEngine startInternal INFO: Starting Servlet Engine: Apache Tomcat/7.0.52 (Ubuntu) May 04, 2014 5:32:04 PM org.apache.catalina.startup.HostConfig deployDirectory INFO: Deploying web application directory /var/lib/tomcat7/webapps/ROOT May 04, 2014 5:32:05 PM org.apache.coyote.AbstractProtocol start INFO: Starting ProtocolHandler ["http-bio-8080"] May 04, 2014 5:32:05 PM org.apache.catalina.startup.Catalina start INFO: Server startup in 833 ms 

我的Dockerfile:

 FROM ubuntu:14.04 # Update Ubuntu RUN apt-get update && apt-get -y upgrade # Add oracle java 7 repository RUN apt-get -y install software-properties-common RUN add-apt-repository ppa:webupd8team/java RUN apt-get -y update # Accept the Oracle Java license RUN echo "oracle-java7-installer shared/accepted-oracle-license-v1-1 boolean true" | debconf-set-selections # Install Oracle Java RUN apt-get -y install oracle-java7-installer # Install tomcat RUN apt-get -y install tomcat7 RUN echo "JAVA_HOME=/usr/lib/jvm/java-7-oracle" >> /etc/default/tomcat7 EXPOSE 8080 # Start Tomcat, after starting Tomcat the container will stop. So use a 'trick' to keep it running. CMD service tomcat7 start && tail -f /var/log/tomcat7/catalina.out 

当它失败了,我怎么能看到出了什么问题?

是否有某种types的Docker启动超时? 如果我的容器不能在x秒内启动,那么Doc​​ker会认为它失败了?

当它失败时:

 docker logs $(docker -q -a -l) 

这将告诉你为什么失败。

我认为这个问题可能是tomcat不能在前台运行,所以你的docker container结束了,你可能想试试在supervisor下运行tomcat,并且把:

 CMD ["supervisord", "-n"] 

作为你的命令。

这将告诉主pipe在前台运行,它会为你运行tomcat。 你可以find很多tomcat supervisor的例子,用google快速解释一下。 这应该很容易做到。

编辑:

或者,在前台运行tomcat

 tomcat/bin/catalina.sh run 

并应该有相同的影响,所以你的CMD看起来像这样:

 CMD ["<path/to/tomcat>/bin/catalina.sh", "run"] 

希望这可以帮助