it-swarm.com.de

Wie starte ich docker-compose beim Booten?

Dies ist auf einem Ubuntu 14.04 LTS VM, auf dem Docker ausgeführt wird, und ich vermute respawn ist die Ursache meines Problems, weiß aber nicht, 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' darin, dass myapp lebt und reagiert, aber /sbin/init die gesamte CPU belegt, wenn ich mit htop überwache. Wenn ich den Eintrag von upstart entferne (Sudo rm /etc/init/dockersuitecrm.conf) und manuell SSH einsetze und docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start ausführe, wird die CPU bei 100% nicht angezeigt und wie zuvor ist myapp wieder aktiv und reagiert.

Daher vermute ich, dass die Art und Weise, wie ich Docker-Compose oben starte, falsch ist. Wie starte ich docker-compose immer ohne manuellen Eingriff?

BEARBEITEN: Sollte nichts anderes sein als /usr/bin/myapp -> /home/batman/dockerapps/myapp als symbolische Verknüpfung.

20
DeepSpace101

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.

9
s1mmel

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

Definiere restart: always wie folgt:

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

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

2
Sergei Filippov

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

0
Evgeny Savelov