web-dev-qa-db-fra.com

docker run script qui exporte les variables env

J'ai déjà recherché parmi les questions telles que docker ENV vs RUN export , ce qui explique les différences entre ces commandes, mais ne m'a pas aidé à résoudre mon problème.

Par exemple, j'ai un script appelé myscript:

#!/bin/bash
export PLATFORM_HOME="$(pwd)"

Et avoir les lignes suivantes dans Dockerfile:

...
COPY myscript.sh /
RUN ./myscript.sh

J'ai également essayé d'utiliser ENTRYPOINT au lieu de RUN ou de déclarer une variable avant d'appeler le script, tout cela sans succès.

Ce que je veux réaliser, c'est que PLATFORM_HOME puisse être référencé à partir d'autres fichiers Dockerfiles qui utilisent celui-ci comme base. Comment faire ?

4
marknorkin

Il n’existe aucun moyen d’exporter une variable d’un script vers une image enfant. En règle générale, les variables d'environnement sont transmises vers le bas, jamais par un parent. 

ENV persistera dans l'environnement de construction, ainsi que dans les images et les conteneurs enfants.

Dockerfile

FROM busybox
ENV PLATFORM_HOME test
RUN echo $PLATFORM_HOME

Dockerfile.child

FROM me/platform
RUN echo $PLATFORM_HOME
CMD ["sh", "-c", "echo $PLATFORM_HOME"]

Construire le parent

docker build -t me/platform .

Puis construisez l'enfant:

→ docker build -f Dockerfile.child -t me/platform-test  .
Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM me/platform
 ---> 539b52190af4
Step 2/3 : RUN echo $PLATFORM_HOME
 ---> Using cache
 ---> 40e0bfa872ed
Step 3/3 : CMD sh -c echo $PLATFORM_HOME
 ---> Using cache
 ---> 0c0e842f99fd
Successfully built 0c0e842f99fd
Successfully tagged me/platform-test:latest

Puis courir

→ docker run --rm me/platform-test
test
3
Matt

Je pense que l'exportation définit les variables d'environnement pour les processus enfants. Donc, peu importe que vous exécutiez RUN ou ENTRYPOINT. En lisant la commande source de linux ne fonctionne pas lors de la construction de Dockerfile , j'estime que la commande source ne peut pas aider non plus.

Vous devez utiliser ENV si vous souhaitez définir les variables d'environnement dans Dockerfile.

3
Chun-Yen Wang

Utilisez simplement ENV PLATFORM_HOME=$(pwd) dans votre fichier Docker. La variable sera accessible dans chaque conteneur que vous créerez à partir du fichier Docker.

0
Michal Šípek