Gracefully stop Phusion Passenger running on apache

I have a docker container with apache running in foreground. On stopping the docker container , a SIGTERM is sent to all the child processes , which is apache in our case.

Now, the problem i am facing is to gracefully shutdown apache on receiving SIGTERM signal.
Apache normally terminates on the current requests immediately which is the main cause of the problem . Somehow, i need to translate the SIGTERM signal to SIGWINCH , which would eventually gracefully shutdown the server.

  • How do I configure boot2docker to start my containers on boot?
  • Difference between Running and Starting a Docker container
  • Docker and securing passwords
  • Docker: Unable to connect to container from host
  • Add host mapping to /etc/hosts in Kubernetes
  • Docker on mac with VirtualBox VM in Bridged mode
  • I was thinking of writing some kind of wrapper script , but couldn’t get as to how to start.

    Any suggestions in this regard would be highly appreciated!

    Thanks.

  • Why does my docker daemon run the container as an arbitrary non-docker user?
  • Docker warning: failed to get default registry endpoint from daemon
  • Docker - Full functional WordPress (WP+DB+PHPMyAdmin)
  • Deployed war file to docker image cannot be accessed from TOMCAT 8 in Ubuntu 16.04
  • Getting error after installing docker toolbox on windows. Error: connect ECONNREFUSED 10.0.75.2:2375
  • Playframework unusual CPU load
  • One Solution collect form web for “Gracefully stop Phusion Passenger running on apache”

    The tomcat inside of container can be stopped gracefully by issuing below command (change tomcat path if needed):

    docker exec -it <container id / name> /usr/local/apache2/bin/apachectl -k graceful
    

    And to your comment, if you want to see the tomcat log in case if it is not running in foreground

    docker exec -it <container id / name> tail -f tail -f /usr/local/apache2/logs/error_log
    

    UPDATE: Based on the comments.

    From the docker documentation, you may specify the time while stopping the docker container. By default, it will only wait for 10 sec.

    To stop container with different timeout:

    docker stop -t <time in seconds> <container id/ name>

    I believe that, increasing time out while stopping might help in your case.

    UPDATE2 sending custom signal, SIGWINCH in your case. Please refer here for more details.

    docker kill -s SIGWINCH <apache container id / name>
    

    UPDATE3
    There are helpful resources on signal trapping:

    https://medium.com/@gchudnov/trapping-signals-in-docker-containers-7a57fdda7d86#.qp68kskwd

    http://www.techbar.me/stopping-docker-containers-gracefully/

    Hope these are helpful.

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.