$PWD n'est pas définie dans ENV instruction dans un Dockerfile
J'ai un Dockerfile commence comme ceci:
FROM ubuntu:16.04
WORKDIR /some/path
COPY . .
ENV PYTHONUSERBASE=$PWD/pyenv PATH=$PWD/pyenv/bin:$PATH
RUN echo "PWD is: $PWD"
RUN echo "PYENV is: $PYTHONUSERBASE"
J'ai trouvé $PWD
(ou ${PWD}
) n'a pas été fixée, quand je lance docker build
, à titre de comparaison, $PATH
a été correctement développée.
En outre, $PWD
dans RUN
a pas de problème (Il imprime /some/path
dans ce cas)
La sortie de l'Dockerfile serait:
PWD is: /some/path
PYENV is: /pyenv
Quelqu'un pourrait me dire pourquoi $PWD
est si spécial? J'imagine que ça peut être lié au comportement de WORKDIR
mais je n'ai aucune idée à ce sujet.
OriginalL'auteur cherrot | 2017-06-09
Vous devez vous connecter pour publier un commentaire.
PWD est une variable spéciale qui est définie à l'intérieur d'une coquille. Lorsque le panneau d'EXÉCUTER quelque chose, il le fait avec ce formulaire
sh -c 'something'
, en passant à la pré-définis des variables d'environnement à partir d'ENV instructions, où PWD n'est pas dans cette liste (voir avecdocker inspect <image-id>
).ENV instructions de ne pas lancer un shell. Il suffit d'ajouter ou de mettre à jour la liste actuelle de l'env de vars dans les métadonnées de l'image.
Je voudrais écrire votre Dockerfile comme ceci:
Plus d'info dans docs:
J'ai lu à nouveau. J'ai mal compris la question. Permettez-moi de résoudre le problème
Merci @Robert !
Vous êtes les bienvenus!
OriginalL'auteur Robert