¿Cómo puedo hacer que mi Docker redacte el guión de "espera por él" para invocar el contenedor original ENTRYPOINT o CMD?

De acuerdo aControl de orden de inicio en Componer, uno puede controlar el orden en queDocker Compose inicia contenedores utilizando un "esperar"script. Scriptwait-for-it.sh espera tanto unhost:port argumento y el comando que el script debe ejecutar cuando el puerto esté disponible. La documentación recomienda que Docker Compose invoque este script utilizando elentrypoint: opción. Sin embargo, si uno usa esta opción, el contenedor ya no ejecutará su valor predeterminadoENTRYPOINT oCMD porqueentrypoint: anula el valor predeterminado.

¿Cómo podría uno proporcionar este comando predeterminado await-for-it.sh para que el script pueda invocar el valor predeterminadoENTRYPOINT oCMD cuando se cumple la condición por la que espera?

En mi caso, he implementado un scriptwait-for-file.sh que sondea esperando que exista un archivo:

#!/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 invocawait-for-file.sh como punto de entrada a un contenedor ligeramente personalizado derivado detomcat: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

Antes de salir con éxito, otro contenedor personalizadoliquibase crea/var/run/liquibase/done y entoncesplatinum-oms efectivamente espera contenedorliquibase completar.

Una vez contenedorliquibase crea un archivo/var/run/liquibase/done, wait-for-file.sh huellas dactilaresFound file [/var/run/liquibase/done]., pero no puede invocar el comando predeterminadocatalina.sh run en contenedor basetomcat:8-jre8. ¿Por qué?

Escenario de prueba

Creé un escenario de prueba simplificadodocker-compose-wait-for-file para demostrar mi problema Envaseubuntu-wait-for-file espera contenedorubuntu-create-file para crear un archivo/wait/done y luego yoesperar envaseubuntu-wait-for-file para invocar el valor predeterminadoubuntu comando contenedor/bin/bash, pero en cambio, sale. ¿Por qué no funciona como esperaba?

Respuestas a la pregunta(1)

Su respuesta a la pregunta