How to restart apache2 without terminating docker container?
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
Related videos on Youtube
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, 2021Comments
-
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 almost 8 yearsThis 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 over 7 yearsThis 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 almost 7 yearsPlease replace the character before "signal" with two dashes (it war probably autocorrected by stackoverflow's input field).
-
k0pernikus almost 7 yearsThis 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 almost 7 yearsAccepted 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 almost 7 yearsGood. I do not remember having another command that restarts only as apache configurations. This command are really useful for this problem :}
-
Cau over 5 yearsHello @MagnoC, what is your base image of Dockerfile?
-
Paul Serikov about 5 yearsI 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 over 4 yearsThis command restarts the container but are really useful in other cases :)
-
LucianDex over 2 yearsin what linux distro & version?