22

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 with htop. If I remove the entry from upstart (sudo rm /etc/init/dockersuitecrm.conf) and manually SSH in and run docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start I don't see the cpu at 100% issue and as before myapp 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.

3 Answers3

9

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.

s1mmel
  • 2,124
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/

1

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