Comment définir des variables d'environnement dans Dockerfile et démarrer l'image parent

J'ai un dockerfile qui a un fichier entrypoint.sh qui exporte une variable Postgres. Ensuite, je veux démarrer le conteneur docker parent qui est référencé dans l'image "FROM pactfoundation/pact-broker". En regardant github pour son courtier Dockerfile github pact, il a CMD ["config.ru"] à la fin. J'ai donc fait la même chose dans mon Dockerfile :

FROM pactfoundation/pact-broker

COPY entrypoint.sh.
CMD ["config.ru"]

Lorsque j'exécute ma commande docker run:

docker run --rm -e POSTGRES_PORT=5433 -e POSTGRES_DBNAME=pactsd -e POSTGRES_URL=localhost -e POSTGRES_PASSWORD=1234 -e POSTGRES_USERNAME=postgres --name pact sonamsamdupkhangsar/pact:test -d

Je vois mon instruction echo entrypoint.sh et le conteneur est mort.

setting pact broker database variables

Comment démarrer le conteneur parent après avoir défini mes variables d'environnement dans mon fichier entrypoint.sh ?

J'ai également essayé avec les éléments suivants:

FROM pactfoundation/pact-broker

ENV PACT_BROKER_DATABASE_NAME=${POSTGRES_DBNAME}
ENV PACT_BROKER_DATABASE_USERNAME=${POSTGRES_USERNAME}
ENV PACT_BROKER_DATABASE_PASSWORD=${POSTGRES_PASSWORD}
ENV PACT_BROKER_DATABASE_HOST=${POSTGRES_URL}
ENV PACT_BROKER_DATABASE_NAME=${POSTGRES_DBNAME}
ENV PACT_BROKER_DATABASE_PORT=$POSTGRES_PORT
RUN echo "PACT_BROKER_DATABASE_PORT: $PACT_BROKER_DATABASE_PORT"

Pourtant, lorsque j'exécute mon image docker construite, je ne vois toujours pas les variables définies. J'ai essayé les deux approches pour "${}" et "$" pour le paramètre env var.


Solution du problème

Vous devez définir vos variables d'environnement à l'aide de l'ENV dans votre fichier docker.

Comme chaque étape est exécutée dans différents conteneurs, ce qui crée l'image si vous la définissez via des scripts shell, cela ne fonctionnera pas. Pensez à utiliser la commande ENV pour le définir

Réf: DOCKERFILE ENV

Commentaires

Posts les plus consultés de ce blog

La fonction GCP Cloud pour écrire des données dans BigQuery s'exécute avec succès, mais les données n'apparaissent pas dans la table BigQuery

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Le shell POSIX (sh) redirige stderr vers stdout et capture stderr et stdout dans des variables