Ich habe einen Python-Docker-Container, der warten muss, bis ein anderer Container (Postgres-Server) das Setup beendet hat. Ich habe den Standard wait-for-it.sh ausprobiert, aber einige Befehle waren nicht enthalten. Ich versuchte einen Grundschlaf (wieder in einer SH-Datei), aber jetzt meldet es exec: 300: not found
, wenn ich versuche, den Befehl, auf den ich warte, endlich auszuführen.Ausführen von wait-for-it.sh im Python-Docker-Container
Wie kann ich dieses Problem umgehen (vorzugsweise ohne das Bild zu verändern, oder um ein Bild zu verlängern.) Erhalten
Ich weiß, ich könnte auch nur einen Python-Skript ausgeführt, sondern im Idealfall würde Ich mag WAIT verwenden for-it.sh wartet darauf, dass der Server aufleuchtet und nicht nur schläft.
Dockerfile (für Stuffer):
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 ich verwenden möchte (aber nicht kann, weil keine psql oder exec):
#!/bin/bash
# wait-for-postgres.sh
set -e
host="$1"
shift
cmd="[email protected]"
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
Können Sie mir Dockerfile und Einstiegspunkt bitte zeigen? –
Was ist der beste Weg, Bash-Befehle nach Bedarf zu installieren. Ich weiß, dass ich theoretisch postgres im python Bild installieren konnte, um psql zu haben, aber exec ist nicht etwas, das ich installieren sollte. –
versuchen, die Zeile 'command: [" ./wait-for-postgres.sh "," -t "," 300 "," localhost: 5432 "," - "," python "," ./stuffing. py "," --file "," ./afile "]' zu 'command: [" ./wait-for-postgres.sh "," localhost: 5432 "," -t "," 300 "," - " - "," python "," ./stuffing.py "," --file "," ./afile "]' warten auf es erwartet, dass das erste Argument ein Hostname sein wird: Port –