Tomcat在启动时冻结在Docker容器中

这是事情。 我有以下的Dockerfile:

DOCKERFILE

FROM centos:centos7 MAINTAINER Legos ADD epel-release-7-9.noarch.rpm /etc/extras/epel-release-7-9.noarch.rpm RUN rpm -Uvh /etc/extras/epel-release*rpm # Install prepare infrastructure RUN yum -y update && \ yum -y install wget && \ yum -y install tar && \ yum -y install haveged && \ yum -y install rng-tools RUN chkconfig haveged on # Prepare environment ADD jdk* /opt/ WORKDIR /opt/ RUN yum localinstall -y "jdk-8u131-linux-x64.rpm" RUN echo "1"|alternatives --config java ENV JAVA_HOME /usr/java/jdk1.8.0_131 #ENV JAVA_OPTS "-Djava.security.egd=/dev/./urandom" ENV CATALINA_HOME /opt/tomcat ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin:$CATALINA_HOME/scripts # Install Tomcat ENV TOMCAT_MAJOR 8 ENV TOMCAT_VERSION 8.5.15 RUN wget http://www-eu.apache.org/dist/tomcat/tomcat-${TOMCAT_MAJOR}/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz && \ tar -xvf apache-tomcat-${TOMCAT_VERSION}.tar.gz && \ rm apache-tomcat*.tar.gz && \ mv apache-tomcat* ${CATALINA_HOME} RUN chmod +x ${CATALINA_HOME}/bin/*sh # Create Tomcat admin user ADD create_admin_user.sh $CATALINA_HOME/scripts/create_admin_user.sh ADD tomcat.sh $CATALINA_HOME/scripts/tomcat.sh ADD webapps/gireUsuarios.war $CATALINA_HOME/webapps/gireUsuarios.war ADD conf/tomcat-users.xml $CATALINA_HOME/conf/tomcat-users.xml ADD conf/Catalina/localhost/manager.xml $CATALINA_HOME/conf/Catalina/localhost/manager.xml RUN chmod +x $CATALINA_HOME/scripts/*.sh # Create tomcat user RUN groupadd -r tomcat && \ useradd -g tomcat -d ${CATALINA_HOME} -s /sbin/nologin -c "Tomcat user" tomcat && \ chown -R tomcat:tomcat ${CATALINA_HOME} WORKDIR /opt/tomcat EXPOSE 8080 8009 8443 9100-9120 4369 80 RUN yum clean all USER tomcat CMD ["tomcat.sh"] 

TL; DR:这是使用Tomcat 8.5和Java 1.8的CentOS 7机器的映像。 在configuration中创build一个用户之后,'tomcat.sh'只运行catalina.sh,所以没什么可说的。

事情是这样的:当我创build一个容器时,容器冻结,同时部署我传递的.war文件。 我试着启动其他的.war文件,结果都是正面的,我试着在我的机器上部署这个有问题的.war文件Tomcat 8.5(一个直接使用的Tomcat,没有比添加manager-gui用户),并正在部署成功。

所以,这个问题:任何想法为什么Tomcat会在部署在Docker容器中时冻结? 我尝试了JAVA_OPTS = -Djava.security.egd = / dev /。/ /随机解决scheme,这应该是有助于这种事情,但没有奏效。 build议?

解决了它。 我添加了额外的参数到JAVA_OPTS,它的工作。 最后的JAVA_OPTS是这样的:

 -Djava.security.egd=/dev/./urandom -Djava.awt.headless=true -Xmx1024m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC