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:portas 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

Testszenario

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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage