Ich benutze die docker-compose
.
Einige Befehle wie up -d service_name
oder start service_name
kehren sofort zurück, und dies ist sehr nützlich, wenn die ausgeführten Container nicht vom Status der Shell abhängen sollen, wie dies bei regulären Befehlen der Fall ist up service_name
. Der eine Anwendungsfall besteht darin, es von einer Art kontinuierlichem Integrations- / Bereitstellungsserver auszuführen.
Diese Art der Ausführung / des Starts von Diensten gibt jedoch keine Rückmeldung über den aktuellen Status des Dienstes.
In der Docker Compose CLI-Referenz für den up
Befehl wird die entsprechende Option zwar erwähnt 1.7.1
, sie schließt sich jedoch in Bezug auf die Version gegenseitig aus mit -d
:
--abort-on-container-exit Stops all containers if any container was stopped. *Incompatible with -d.*
Kann ich irgendwie manuell überprüfen, ob der Container tatsächlich funktioniert und aufgrund eines Fehlers nicht angehalten wurde?
quelle
docker ps -q -f "status=running" --no-trunc | grep $(docker-compose ps -q <service_name>)
grep ....
Teil eine leere Zeichenfolge enthält.if [ -z `docker-compose ps -q mysql` ] || [ -z `docker ps -q --no-trunc | grep $(docker-compose ps -q mysql)` ]; then
. Dabei wird zunächst geprüft, ob der Dienst überhaupt vorhanden ist (auch wenn er gestoppt ist), und im zweiten Teil wird geprüft, ob der vorhandene Dienst tatsächlich ausgeführt wird. Möglicherweise möchten Sie dies in Ihr Beispiel für zukünftige Leser aufnehmen, die nur einen Blick auf die akzeptierte Antwort werfen. Ich denke es ist nützlich.Für die Version
1.7.1
sind keine derartigen Befehle integriert.Stattdessen
exec
kann das in ähnlicher Weise verwendet werden.Wenn Sie es für den Dienst ausführen, für den einige Container verfügbar sind, wird es ordnungsgemäß ausgeführt:
Wenn Sie es jedoch für den Dienst ausführen, für den keine Dienstcontainer ausgeführt werden , wird ein Fehler angezeigt:
Es kann also verwendet werden, um zu überprüfen, ob "lebendige" Container für einen bestimmten Dienst vorhanden sind.
quelle
Du kannst rennen:
Und Sie erhalten die ID des Containers, wenn ausgeführt
service-name
wird. So etwas wie:Wenn der Dienst nicht ausgeführt wird, ist die Ausgabe leer. Wenn Sie dies also in einem Skript verwenden möchten, können Sie Folgendes tun:
quelle
docker-compose up
Strg-C.docker-compose ps
sollte dann zeigen, dass die Containerzustände nicht "Up" sind, aberdocker-compose ps -q service-name
trotzdem eine ID geben.Ich hatte ein ähnliches Bedürfnis. Ich habe jedoch eine
restart: always
in meiner Umgebung. Es kann also etwas schwierig sein zu erkennen, ob etwas abstürzt und in einer Schleife neu startet.Ich habe einen Icinga / Nagios-Check durchgeführt, um auch die erstellten und Startzeiten zu vergleichen. Vielleicht ist es für jemanden auf der ganzen Linie nützlich:
quelle
Wenn Sie dieses Szenario annehmen:
Sie können überprüfen , ob es irgendwelche gestoppt Behälter aufgrund eines Fehlers ist mit:
docker ps -a | grep 'Exited (255)'
.Diese Prüfung funktioniert auch bei Containern, von denen erwartet wird, dass sie sofort ohne Fehler anhalten (dh Datencontainer), da ihr Status (von
docker ps -a
) als markiert istExited (0)
.In unserer docker-compose.yml beginnen wir unsere Container beispielsweise mit:
command: sh -c 'node dotenv_check.js && pm2 start --no-daemon src/worker.js --watch'
Für php-fpm verwenden wir einen ähnlichen Befehl:
Das
dotenv_check.js
unddotenv_check.php
sind Skripte, die mit einem Fehlercode beendet werden, falls eine erforderliche Umgebungsvariable fehlt.Der
set -e
Befehl weist das Skript an, bei einem Fehler anzuhalten, wodurch der Container sofort angehalten wird. Über set-equelle
Wie wäre es damit?
Sie listen die Prozesse auf, wählen die Zeilen aus, in denen "Up" in Spalte 4 steht, und filtern nach einer Übereinstimmung mit dem Dienstnamen.
quelle