Run a background script inside a docker container

In my Dockerfile, I run a script:

RUN /bin/sh -c scripts/init.sh

Inside init.sh, all commands ending with & are not executed: I cannot run background processes. Any idea why?

4

3 Answers

I had the similar issue and something like the following helped me.

RUN nohup bash -c "scripts/init.sh &" && sleep 4

In many cases the server you started isn’t yet fully ready. To allow the server a bit more time to get ready add a sleep command. How large the argument sleep needs to depend on the service you start and you probably need to tweak it.

Read more on this Doc

0

To run something in the background:

RUN bash -c "sh ./scripts/init.sh & sleep 5 && tail -F /dev/null"

This will run your script and immediately sleeps for 5 seconds, then keeps container running forever. Using this technique, you can run multiple commands in a Docker.

You can remove tail -F /dev/null or replace with the next command/service which doesn't exit and keeps container running.

My first idea is to create services inside the container instead of running them with nohup or &, run them as system service and you don't need to handle them in init.sh.

But this is not a "real" docker approach. If you need more than 1 service to run, separate them to different containers (1 container - 1 service) and put all of them together with a docker-compose solution.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like