Dies ist auf einer Ubuntu 14.04 LTS-VM, auf der Docker ausgeführt wird, und ich vermute, dass dies respawn
die 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 myapp
es lebendig und reaktionsschnell ist, aber /sbin/init
die 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 start
sehe ich die CPU nicht bei 100% Problem und wie zuvor myapp
ist 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-compose
läuft immer ohne manuelles Eingreifen?
EDIT: Sollte aber /usr/bin/myapp -> /home/batman/dockerapps/myapp
als symbolische Verknüpfung keine Rolle spielen .
respawn
Befehl im Skript ausführen .docker-compose start
.script
Block. Vielleicht ist das ein Teil des Problems? Ich habechdir /usr/bin/myapp/
und in der nächsten Zeileexec docker-compose up
statt.docker-compose up -d
Antworten:
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
und dann eintreten
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.
quelle
Angenommen, Sie verwenden Version 2 der Docker Compose-Definitionen
docker-compose.yml
, dann können Sie Folgendes tun:So definieren
restart: always
:Referenz: https://docs.docker.com/compose/compose-file/compose-file-v2/
quelle
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
quelle