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 ?
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
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.
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.