How to restart apache2 without terminating docker container?

38,943

Solution 1

If you use apache as the primary service to keep your running container, you can NOT reboot it. Simply because you built the image and sets the CMD with it.

The main purpose of a CMD is to provide defaults for an executing container. These defaults can include an executable, or they can omit the executable, in which case you must specify an ENTRYPOINT instruction as well.

Try to reload without restart a service:

/etc/init.d/apache2 reload

Solution 2

My solution to this was to exit my bash shell into the container, and just restart the container outside of Docker. Because Apache is set as the primary service, this also restarts Apache, and doesn't crash the container.

docker restart <container>

Solution 3

sudo docker kill --signal="USR1" your_appache_container

Other signals that you can use to achieve the following :

Stop Now Signal: TERM

Graceful Restart Signal: USR1

Restart Now Signal: HUP

Graceful Stop Signal: WINCH

From: this website

Solution 4

I want to customize the container, I need to install some extension and for them to work I need to restart apache for the changes to take effect.

This is against the Docker's immutable infrastructure principle. IMHO, you are using the docker container similar to a full blown VM. Instead, I would suggest you to treat the docker image as the final artifact and version it. Note: This is just my humble opinion, you may have a valid usecase which I am not aware of, which I am curious to find out.

Solution 5

Inside docker, I use a command like this:

exec /usr/sbin/httpd -D FOREGROUND
Share:
38,943

Related videos on Youtube

k0pernikus
Author by

k0pernikus

I am Philipp Kretzschmar, a backend developer from Hamburg working at Demvsystem. You can find me on github. Or twitter. My main weapons of choice are: php TypeScript (I don't want to write plain JavaScript anymore) and nodejs I play around with: Java python rust I used to write some scala, but for now I don't want to go there anymore. I feel most comfortable on a unix-like system featuring a powerful bash. (This excludes MacOS.) I love to code within JetBrains's flavored IDEs, e.g. IntelliJ, PhpStorm, WebStorm and using the IdeaVim plugin and having a docker-compose stack to develop on.

Updated on November 20, 2021

Comments

  • k0pernikus
    k0pernikus over 2 years

    I am using as a base the php docker container with the tag:

    php:5.6-apache
    

    When I try to restart the apache2 inside the container, the container stops:

    root@phalconapp:/var/www/html# service apache2 restart
    Restarting web server: apache2Terminated
    root@phaclonapp:/var/www/html#
    me@myLocalComputer:
    

    How to restart apache2 without stopping the container?

    I want to play around with the container and customize it, before I put my changes into the dockerfile. I want to install some extension and for them to work I need to restart apache for the changes to take effect.

    This is the log file via:

    Attaching to dltasklight_phlaconapp_1
    phlaconapp_1 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
    phlaconapp_1 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
    phlaconapp_1 | [Mon May 30 10:19:24.556154 2016] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.10 (Debian) PHP/5.6.22 configured -- resuming normal operations
    phlaconapp_1 | [Mon May 30 10:19:24.556181 2016] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
    phlaconapp_1 | [Mon May 30 10:21:11.754993 2016] [mpm_prefork:notice] [pid 1] AH00169: caught SIGTERM, shutting down
    dltasklight_phlaconapp_1 exited with code 0
    
  • k0pernikus
    k0pernikus almost 8 years
    This is what I ended up doing while developing the dev stack. Thanks for writing it out and +1. I am not accepting this solution as running the reload was not a requirement in the end as if the extensions are installed before the apache starts, it's no requirement for it to restart it.
  • Joseph Astrahan
    Joseph Astrahan over 7 years
    This doesn't work for me, I think you need to give more information in your answer. I get the following error, Error response from daemon: Cannot kill container –signal=USR1: No such container: –signal=USR1. I made sure to enter correct container by ID and Name, both same error.
  • guthy
    guthy almost 7 years
    Please replace the character before "signal" with two dashes (it war probably autocorrected by stackoverflow's input field).
  • k0pernikus
    k0pernikus almost 7 years
    This was while trying to setup a development stack inside a docker container without running docker build. In the end, I ended up with a dockerfile, I just wanted to try something out. See my comment on Cauê Alves answer.
  • k0pernikus
    k0pernikus almost 7 years
    Accepted this answer, as the other incomming answer are going besides the point. Restarting was not a requirement, reloading the config was, and this helped me built a proper Dockerfile.
  • Cau
    Cau almost 7 years
    Good. I do not remember having another command that restarts only as apache configurations. This command are really useful for this problem :}
  • Cau
    Cau over 5 years
    Hello @MagnoC, what is your base image of Dockerfile?
  • Paul Serikov
    Paul Serikov about 5 years
    I faced with issue that for some reason it's not enough to send signal once, it's needed to send it twice stackoverflow.com/questions/55262485/…
  • Cau
    Cau over 4 years
    This command restarts the container but are really useful in other cases :)
  • LucianDex
    LucianDex over 2 years
    in what linux distro & version?