Ejecutando wait-for-it.sh en python Contenedor Docker

Tengo un contenedor acoplable de Python que necesita esperar hasta que otro contenedor (server Postgres) finalice la installation. Probé el estándar wait-for-it.sh, pero no se incluyeron varios commands. Probé una suspensión básica (de nuevo en un file sh) pero ahora está informando de la exec: 300: not found al intentar finalmente ejecutar el command que estoy esperando.

¿Cómo puedo evitar esto (preferiblemente sin cambiar la image o tener que extender una image).

Sé que también podría ejecutar un script de Python, pero lo ideal sería usar wait-for-it.sh para esperar a que el server aparezca en lugar de simplemente dormir.

Dockerfile (para relleno):

  FROM python:2.7.13 ADD ./stuff/bin /usr/local/bin/ ADD ./stuff /usr/local/stuff WORKDIR /usr/local/bin COPY requirements.txt /opt/updater/requirements.txt COPY internal_requirements.txt /opt/stuff/internal_requirements.txt RUN pip install -r /opt/stuff/requirements.txt RUN pip install -r /opt/stuff/other_requirements.txt 

docker-compose.yml:

  version: '3' services: local_db: build: ./local_db ports: - "localhost:5432:5432" stuffer: build: ./ depends_on: - local_db command: ["./wait-for-postgres.sh", "-t", "300", "localhost:5432", "--", "python", "./stuffing.py", "--file", "./afile"] 

Script que quiero usar (pero no puedo porque no hay psql o exec):

  #!/bin/bash # wait-for-postgres.sh set -e host="$1" shift cmd="$@" until psql -h "$host" -U "postgres" -c '\l'; do >&2 echo "Postgres is unavailable - sleeping" sleep 1 done >&2 echo "Postgres is up - executing command" exec $cmd 

El comentario de Sergey. Tuve un order de argumento equivocado. Este problema no tiene nada que ver con Docker y todo tiene que ver con mi incapacidad para leer.

Hice un ejemplo para que lo veas funcionar:

https://github.com/nitzap/wait-for-postgres

Por otro lado también puede tener errores dentro de la ejecución del script para validar que el service está funcionando. No debe referirse como localhost …. porque eso está dentro del context de contenedores, si desea apuntar a otro contenedor tiene que ser a través del nombre del service.