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 .

DeepSpace101
quelle
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
starte

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.

s1mmel
quelle
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
2

Angenommen, Sie verwenden Version 2 der Docker Compose-Definitionen docker-compose.yml, dann können Sie Folgendes tun:

So definieren restart: always:

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

Referenz: https://docs.docker.com/compose/compose-file/compose-file-v2/

Sergei Filippov
quelle
1
Die Frage ist, welche Docker-Site nicht antwortet: "Wie starte ich Docker-Compose immer ohne manuellen Eingriff?"
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

Evgeny Savelov
quelle