Wie kann ich meinen Docker veranlassen, ein Warteskript zu erstellen, das den Originalcontainer ENTRYPOINT oder CMD aufruft?
GemäßControlling Startreihenfolge in Compose kann man die Reihenfolge steuern, in derDocker Compose startet Container mit einem "warte darau "script. Scriptwait-for-it.sh
erwartet sowohl einhost:port
as Argument @ sowie der Befehl, den das Skript ausführen soll, wenn der Port verfügbar ist. In der Dokumentation wird empfohlen, dass Docker Compose dieses Skript mit dem @ aufrufentrypoint:
Möglichkeit. Wenn Sie diese Option verwenden, führt der Container jedoch nicht mehr das Standard-@ auENTRYPOINT
oderCMD
weilentrypoint:
überschreibt die Standardeinstellung.
Wie kann man diesen Standardbefehl an @ übergebewait-for-it.sh
damit das Skript das Standard-@ aufrufen kaENTRYPOINT
oderCMD
Wann ist die Bedingung, auf die gewartet wird, erfüllt?
In meinem Fall habe ich ein Skript implementiertwait-for-file.sh
das fragt ab, ob eine Datei existiert:
#!/bin/bash
set -e
waitFile="$1"
shift
cmd="$@"
until test -e $waitFile
do
>&2 echo "Waiting for file [$waitFile]."
sleep 1
done
>&2 echo "Found file [$waitFile]."
exec $cmd
Docker Compose ruft @ await-for-file.sh
als Einstiegspunkt in einen leicht benutzerdefinierten Container, der von @ abgeleitet itomcat:8-jre8
:
platinum-oms:
image: opes/platinum-oms
ports:
- "8080:8080"
volumes_from:
- liquibase
links:
- postgres:postgres
- activemq:activemq
depends_on:
- liquibase
- activemq
entrypoint: /wait-for-file.sh /var/run/liquibase/done
Vor dem erfolgreichen Beenden wird ein anderer benutzerdefinierter Containerliquibase
erstellt/var/run/liquibase/done
und soplatinum-oms
Wartet effektiv auf Containerliquibase
fertigstellen
Einmal Containerliquibase
erstellt die Datei/var/run/liquibase/done
, wait-for-file.sh
printsFound file [/var/run/liquibase/done].
, ruft aber den Standardbefehl @ nicht acatalina.sh run
im Basiscontainertomcat:8-jre8
. Warum
Ich habe ein vereinfachtes Testszenario erstelltdocker-compose-wait-for-file
um mein Problem zu demonstrieren. Behälterubuntu-wait-for-file
wartet auf containerubuntu-create-file
um eine Datei zu erstellen/wait/done
und dann habe icherwarten vo containerubuntu-wait-for-file
um das Standard @ aufzurufubuntu
container befehl/bin/bash
, aber stattdessen wird es beendet. Warum funktioniert es nicht wie erwartet?