How to run docker-compose at bootup?
Solution 1
Simply use crontab, instead of using a time intervall simply say @reboot
So login as the user who should start this script and type the command
crontab -e
and then enter
@reboot /better/enter/fullpath/here/docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start
Reboot the system and see if it works. There's one advantage over upstart, even it it is started a little bit later, you don't have to worry much about dependcies like networking, etc. to be up already.
Solution 2
Assuming you're using version 2 of Docker Compose definitions in you docker-compose.yml
, you can do the following:
Defining restart: always
like so:
version: '2'
services:
web:
image: nginx
restart: always
Reference: https://docs.docker.com/compose/compose-file/compose-file-v2/
Solution 3
Docker is not ready immediately If you run the script too early, nothing will happen. The docker will start responding to the docker ps command as soon as it is ready so you can use this trick in crontab:
nano /etc/crontabs/root
@reboot /usr/bin/docker ps && /usr/bin/docker-compose -f /prod.yml start
Related videos on Youtube
Edward
Updated on September 18, 2022Comments
-
Edward over 1 year
This is on an Ubuntu 14.04 LTS VM running Docker and I suspect
respawn
is the cause of my problem but not sure of the ideal solution.Current upstart script (
cat /etc/init/dockersuitecrm.conf
)description "Start docker containers" author "Batman" start on filesystem and started docker stop on runlevel [!2345] respawn script docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start end script
This 'works' in that
myapp
is alive and responsive but/sbin/init
takes up all the CPU when I monitor withhtop
. If I remove the entry from upstart (sudo rm /etc/init/dockersuitecrm.conf
) and manually SSH in and rundocker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start
I don't see the cpu at 100% issue and as beforemyapp
is again alive and responsive.So I suspect the way I'm starting docker-compose above is incorrect. What's the right way to start
docker-compose
is always running without manual intervention?EDIT: Shouldn't matter but
/usr/bin/myapp -> /home/batman/dockerapps/myapp
as a symbolic link.-
Edward about 9 yearsNot a solution but as a work-around, I'm able to run this without the
respawn
command in the script. -
Mark Lopez almost 9 yearsSame question, but I saw this: serverfault.com/questions/615820/…. The magic is with using
docker-compose start
. -
KCD over 7 yearsDon't you just want to run docker-compose in the background? i.e.
docker-compose up -d
-
Lu32 about 7 yearsput restart: always in the container spec
-
-
Justin Smith almost 8 yearsAny idea how clean a reboot would be running it this way?
-
Otheus almost 7 yearsSorry, but this is not a very good answer. It might work from time to time, but as cron might be loaded before other docker requirements, you run into a race condition.
-
Otheus almost 7 yearsThe question is, which docker's site doesn't answer, was: "What's the right way to start docker-compose is always running without manual intervention?"