Wie starte ich docker-compose beim Booten?


20

Dies ist auf einer Ubuntu 14.04 LTS-VM, auf der Docker ausgeführt wird, und ich vermute, dass dies respawndie Ursache für mein Problem ist, bin mir jedoch nicht sicher, welche Lösung die ideale ist.

Aktuelles Startskript ( 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

Dies funktioniert, indem myappes lebendig und reaktionsschnell ist, aber /sbin/initdie gesamte CPU beansprucht, wenn ich mit dem Monitor arbeite htop. Wenn ich den Eintrag von upstart ( sudo rm /etc/init/dockersuitecrm.conf) entferne und SSH manuell einsetze und starte, docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp startsehe ich die CPU nicht bei 100% Problem und wie zuvor myappist sie wieder am Leben und ansprechbar.

Daher vermute ich, dass die Art und Weise, wie ich Docker-Compose oben starte, falsch ist. Was ist der richtige Weg, um zu starten, docker-composeläuft immer ohne manuelles Eingreifen?

EDIT: Sollte aber /usr/bin/myapp -> /home/batman/dockerapps/myappals symbolische Verknüpfung keine Rolle spielen .


Keine Lösung, aber als Abhilfe kann ich dies ohne den respawnBefehl im Skript ausführen .
DeepSpace101

Dieselbe Frage, aber ich habe Folgendes gesehen: serverfault.com/questions/615820/… . Die Magie liegt in der Verwendung docker-compose start.
Mark Lopez

Ich habe eine ähnliche Konfiguration, benutze aber keinen scriptBlock. Vielleicht ist das ein Teil des Problems? Ich habe chdir /usr/bin/myapp/und in der nächsten Zeile exec docker-compose upstatt.
Jmreicha

Möchten Sie docker-compose nicht einfach im Hintergrund ausführen? iedocker-compose up -d
KCD

Antworten:


9

Verwenden Sie einfach crontab, anstatt ein Zeitintervall zu verwenden, sagen Sie einfach @reboot

Melden Sie sich als der Benutzer an, der dieses Skript starten soll, und geben Sie den Befehl ein

crontab -e

und dann eintreten

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

Starten Sie das System neu und prüfen Sie, ob es funktioniert. Es gibt einen Vorteil gegenüber dem Emporkömmling, selbst wenn er etwas später gestartet wird, müssen Sie sich nicht viel über Abhängigkeiten wie Netzwerke usw. Gedanken machen, um schon auf dem Laufenden zu sein.


Irgendeine Idee, wie sauber ein Neustart wäre, wenn er auf diese Weise ausgeführt würde?
Justin Smith

1
Sorry, aber das ist keine sehr gute Antwort. Es könnte von Zeit zu Zeit funktionieren, aber da cron möglicherweise vor anderen Docker-Anforderungen geladen wird, laufen Sie in einen Race-Zustand.
Otheus


0

Docker ist nicht sofort bereit Wenn Sie das Skript zu früh ausführen, geschieht nichts. Der Docker reagiert auf den Docker-Befehl ps, sobald er fertig ist, sodass Sie diesen Trick in crontab anwenden können:

Nano / etc / crontabs / root

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.