Automatically Start Services in Docker Container

Pedro picture Pedro · Aug 4, 2013 · Viewed 59.7k times · Source

I'm doing some initial tests with docker. At moment i have my images and I can put some containers running, with:

docker ps

I do docker attach container_id and start apache2 service.

Then from the main console I commit the container to the image.

After exiting the container, if I try to start the container or try to run one new container from the committed image, the service is always stopped.

How can create or restart one container with the services started, for example apache?

Answer

damick picture damick · Nov 9, 2013

EDIT: I've learned a lot about Docker since originally posting this answer. "Starting services automatically in Docker containers" is not a good usage pattern for Docker. Instead, use something like fleet, Kubernetes, or even Monit/SystemD/Upstart/Init.d/Cron to automatically start services that execute inside Docker containers.

ORIGINAL ANSWER: If you are starting the container with the command /bin/bash, then you can accomplish this in the manner outlined here: https://stackoverflow.com/a/19872810/2971199

So, if you are starting the container with docker run -i -t IMAGE /bin/bash and if you want to automatically start apache2 when the container is started, edit /etc/bash.bashrc in the container and add /usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd.conf (or whatever your apache2 start command is) to a newline at the end of the file.

Save the changes to your image and restart it with docker run -i -t IMAGE /bin/bash and you will find apache2 running when you attach.