web-dev-qa-db-fra.com

Comment exécuter docker-compose au démarrage?

C'est sur un Ubuntu 14.04 LTS VM sous Docker et je soupçonne que respawn est la cause de mon problème mais je ne suis pas sûr de la solution idéale.

Script de démarrage actuel (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

Ce 'fonctionne' dans le myapp est actif et réactif, mais /sbin/init occupe tout le processeur lorsque je surveille avec htop. Si je supprime l'entrée de upstart (Sudo rm /etc/init/dockersuitecrm.conf) et SSH manuellement et exécute docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start, je ne vois pas le cpu à 100% et, comme auparavant, myapp est à nouveau actif et réactif.

Donc, je soupçonne que la façon dont je commence à composer Docker ci-dessus est incorrecte. Quelle est la bonne façon de démarrer docker-compose est toujours en cours d'exécution sans intervention manuelle?

EDIT: Cela ne devrait pas compter mais /usr/bin/myapp -> /home/batman/dockerapps/myapp en tant que lien symbolique.

20
DeepSpace101

Utilisez simplement crontab, au lieu d'utiliser un intervalle de temps, dites simplement @reboot

Alors connectez-vous en tant qu'utilisateur qui doit démarrer ce script et tapez la commande

crontab -e

puis entrez

@reboot /better/enter/fullpath/here/docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start

Redémarrez le système et voyez si cela fonctionne. Il y a un avantage par rapport au débutant, même s'il est démarré un peu plus tard, vous n'avez pas à vous soucier de dépendances telles que la mise en réseau, etc.

9
s1mmel

En supposant que vous utilisiez la version 2 de Docker Compose avec vous docker-compose.yml, vous pouvez effectuer les opérations suivantes:

Définir restart: always comme suit:

version: '2'
services:
  web:
    image: nginx
    restart: always

Référence: https://docs.docker.com/compose/compose-file/compose-file-v2/

2
Sergei Filippov

Docker n'est pas prêt immédiatement Si vous exécutez le script trop tôt, rien ne se passera. Le docker commencera à répondre à la commande docker ps dès qu'il sera prêt pour que vous puissiez utiliser cette astuce dans crontab:

nano/etc/crontabs/root

@reboot/usr/bin/docker ps &&/usr/bin/docker-compose -f /prod.yml start

0
Evgeny Savelov