2017-06-12 71 views
0

这是事情。我有以下Dockerfile:Tomcat在启动时在Docker容器中冻结

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:这是一个形象的CentOS的7机器的Tomcat 8.5和Java 1.8。在配置中创建用户后,'tomcat.sh'只运行catalina.sh,所以没有太多可以说的。

事情是这样的:当我创建一个容器时,容器在部署我传递的.war文件时冻结。我试着启动其他的.war文件,并获得了积极的结果,我尝试在我的机器Tomcat 8.5中部署这个有问题的.war文件(一个直接使用的Tomcat,只是增加了manager-gui用户),并且它正在成功部署。

所以,问题:任何想法为什么Tomcat会在部署在Docker容器中时冻结?我尝试了一下JAVA_OPTS = -Djava.security.egd =/dev/./ urandom解决方案,它可以帮助解决这类事情,但它并不奏效。建议?

回答

0

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

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