In my Dockerfile, I run a script:
RUN /bin/sh -c scripts/init.sh
init.sh, all commands ending with
& are not executed: I cannot run background processes.
Any idea why?
Super User is a question and answer site for computer enthusiasts and power users. It only takes a minute to sign up.Sign up to join this community
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
My first idea is to create services inside the container instead of running them with
&, 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.
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.