Search code examples
servicedockerrailo

How to start railo service in background on the Docker


My name Trang, I have created Docker image on https://registry.hub.docker.com/u/trangunghoa/railo-mysql/ It is run ok. Now I created Dockerfile but I can't start automatic Railo service. Please help me. I have start by some commands at shell script:

exec /opt/railo/railo_ctl start
exec /opt/railo/railo_ctl start -D FOREGROUND
service railo_ctl restart
exec service railo_ctl restart

No command it work.


Solution

  • I looked inside your Dockerfile and identified the problem.

    You can only use one CMD inside a Dockerfile. (if you use multiple CMD the old one will override) More info : https://docs.docker.com/reference/builder/#cmd

    You need to know that Docker isn't made for running multiple process without a little bit of help. I suggest using supervisord : https://docs.docker.com/articles/using_supervisord/

    You can't use RUN service inside a Dockerfile, the reason is simple the command service will be executed and start a daemon, then notify the execution was successful. The temporary container will be killed (and the daemon too) and after that the change will be committed.

    What your Dockerfile should look like :

    FROM ubuntu:trusty
    MAINTAINER Trang Lee <[email protected]>, Seta International Vietnam([email protected])
    
    #Install base packages
    RUN apt-get -y update
    RUN apt-get install -y openjdk-7-jre-headless
    RUN apt-get install -y tomcat7 tomcat7-admin apache2 libapache2-mod-jk
    RUN apt-get purge -y openjdk-6-jre-headless icedtea-6-jre-cacao openjdk-6-jre-lib icedtea-6-jre-jamvm
    RUN apt-get install -y supervisor 
    
    # config to enable .htaccess
    ADD apache_default /etc/apache2/sites-available/000-default.conf
    RUN a2enmod rewrite
    
    ENV APACHE_RUN_USER www-data
    ENV APACHE_RUN_GROUP www-data
    ENV APACHE_LOG_DIR /var/log/apache2
    
    # start service 
    ADD start-apache2.sh /start-apache2.sh
    ADD railo.sh /railo.sh
    ADD run.sh /run.sh
    RUN chmod +x /*.sh
    #RUN sudo service apache2 start
    
    
    # install railo
    RUN apt-get install -y wget
    RUN wget http://www.getrailo.org/railo/remote/download42/4.2.1.000/tomcat/linux/railo-4.2.1.000-pl2-linux-x64-installer.run
    
    RUN chmod -R 744 railo-4.2.1.000-pl2-linux-x64-installer.run
    RUN ./railo-4.2.1.000-pl2-linux-x64-installer.run --mode unattended --railopass “123456”
    
    # remove railo setup
    #RUN rm -rf railo-4.2.1.000-pl2-linux-x64-installer.run
    
    #RUN sudo service railo_ctl start
    
    RUN mkdir -p /etc/service/railo
    ADD start-railo.sh /etc/service/railo/run
    RUN chmod 755 /etc/service/railo/run
    
    
    # EXPOSE <port>
    EXPOSE 80 8888
    
    #CMD ["/railo.sh"]
    #CMD ["/start-apache2.sh"]
    
    # Supervisord configuration
    RUN mkdir /var/log/supervisor
    ADD ./supervisord.conf /etc/supervisor/conf.d/supervisord.conf
    CMD ["/usr/bin/supervisord"]
    

    With your supervisord.conf file looking something like that :

    [supervisord]
    nodaemon=true
    
    [program:apache2]
    command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"
    
    [program:railo]
    command=/bin/bash -c "exec /opt/railo/railo_ctl start -D FOREGROUND"