21 votes

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

Ceci se trouve sur une machine virtuelle Ubuntu 14.04 LTS exécutant 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 upstart actuel (cat /etc/init/dockersuitecrm.conf)

description "Démarrer les conteneurs docker"
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

Cela 'fonctionne' dans la mesure où myapp est actif et réactif mais /sbin/init prend tout le processeur lorsque je surveille avec htop. Si je supprime l'entrée d'upstart (sudo rm /etc/init/dockersuitecrm.conf) et que j'accède manuellement en SSH et exécute docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start, je ne vois pas le problème de CPU à 100% et comme précédemment myapp est à nouveau actif et réactif.

Je soupçonne donc que la façon dont je démarre docker-compose ci-dessus est incorrecte. Quelle est la bonne façon de démarrer docker-compose pour qu'il fonctionne toujours sans intervention manuelle ?

ÉDIT : Cela ne devrait pas avoir d'importance mais /usr/bin/myapp -> /home/batman/dockerapps/myapp en tant que lien symbolique.

9voto

s1mmel Points 1794

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

Connectez-vous en tant qu'utilisateur devant démarrer ce script et tapez la commande

crontab -e

puis entrez

@reboot /chemin/complet/ici/docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start

Redémarrez le système et vérifiez si cela fonctionne. Il y a un avantage par rapport à upstart, même s'il est démarré un peu plus tard, vous n'avez pas beaucoup à vous soucier des dépendances comme le réseau, etc. qui doivent déjà être en place.

2voto

Sergei Filippov Points 81

En supposant que vous utilisez la version 2 des définitions de Docker Compose dans votre docker-compose.yml, vous pouvez faire ce qui suit :

Définir restart: always comme ceci :

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

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

1voto

Evgeny Savelov Points 11

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, vous pouvez donc utiliser ce truc dans crontab:

nano /etc/crontabs/root

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X