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


20

C'est sur une machine virtuelle Ubuntu 14.04 LTS exécutant Docker et je pense que respawnc'est la cause de mon problème mais je ne suis pas sûr de la solution idéale.

Script parvenu 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

Cela `` fonctionne '' en ce qu'il myappest vivant et réactif, mais /sbin/initprend tout le processeur lorsque je surveille htop. Si je supprime l'entrée de upstart ( sudo rm /etc/init/dockersuitecrm.conf) et SSH manuellement et que docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp startje lance, je ne vois pas le processeur à 100% et comme avant, il myappest à nouveau vivant et réactif.

Je soupçonne donc que la façon dont je démarre la composition de docker ci-dessus est incorrecte. Quelle est la bonne façon de démarrer docker-composefonctionne toujours sans intervention manuelle?

EDIT: ne devrait pas avoir d'importance, mais /usr/bin/myapp -> /home/batman/dockerapps/myappcomme un lien symbolique.


Pas une solution mais comme solution de contournement, je suis capable d'exécuter cela sans la respawncommande dans le script.
DeepSpace101

Même question, mais j'ai vu ceci: serverfault.com/questions/615820/… . La magie réside dans l'utilisation docker-compose start.
Mark Lopez

J'ai une configuration similaire mais n'utilise pas de scriptbloc. Peut-être que cela fait partie du problème? J'ai chdir /usr/bin/myapp/et sur la ligne suivante à la exec docker-compose upplace.
jmreicha

Vous ne voulez pas simplement exécuter docker-compose en arrière-plan? soitdocker-compose up -d
KCD

mettre le redémarrage: toujours dans la spécification du conteneur
Lu32

Réponses:


9

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 à upstart, même s'il est démarré un peu plus tard, vous n'avez pas à vous soucier beaucoup des dépendances comme la mise en réseau, etc. pour être déjà opérationnel.


Avez-vous une idée de la propreté d'un redémarrage?
Justin Smith

1
Désolé, mais ce n'est pas une très bonne réponse. Cela peut fonctionner de temps en temps, mais comme cron peut être chargé avant d'autres exigences de docker, vous rencontrez une condition de concurrence critique.
Otheus

2

En supposant que vous utilisez la version 2 des définitions Docker Compose en vous docker-compose.yml, vous pouvez effectuer les opérations suivantes:

Définir restart: alwaysainsi:

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

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


1
La question est, à laquelle le site de docker ne répond pas, était: "Quelle est la bonne façon de démarrer docker-compose s'exécute toujours sans intervention manuelle?"
Otheus

0

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 afin 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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.