Changer la commande de répertoire dans Docker?

214

Dans Docker, je veux faire ceci:

git clone XYZ
cd XYZ
make XYZ

Cependant, comme il n'y a pas de commande cd, je dois à chaque fois passer le chemin complet (faire XYZ / fullpath). Des bonnes solutions pour cela?

RParadox
la source
6
La commande WORKDIR est également considérée comme une solution de contournement possible
trcarden
1
Ce n'est pas une solution de contournement, c'est la solution recommandée docs.docker.com/engine/userguide/eng-image/…
John John Pichler

Réponses:

151

Vous pouvez exécuter un script ou un paramètre plus complexe sur le RUN. Voici un exemple d'un Dockerfile que j'ai téléchargé pour regarder précédemment:

RUN cd /opt && unzip treeio.zip && mv treeio-master treeio && \
    rm -f treeio.zip && cd treeio && pip install -r requirements.pip

En raison de l'utilisation de «&&», il n'obtiendra la commande finale «pip install» que si toutes les commandes précédentes ont réussi.

En fait, puisque chaque RUN crée un nouveau commit et (actuellement) une couche AUFS, si vous avez trop de commandes dans le Dockerfile, vous utiliserez les limites, donc la fusion des RUN (lorsque le fichier est stable) peut être très chose utile à faire.

Alister Bulman
la source
99
Au cas où vous vous poseriez la question, l'effet de la cdseule dure pour la RUNcommande actuelle . Le prochain RUNcommencera à partir du courant WORKDIR.
Ritchie
532

Pour changer dans un autre répertoire, utilisez WORKDIR . Toutes les commandes RUN, CMD et ENTRYPOINT après WORKDIR seront exécutées à partir de ce répertoire.

RUN git clone XYZ 
WORKDIR "/XYZ"
RUN make
Javier Castellanos
la source
40
L'utilisation de WORKDIR est également citée comme une meilleure pratique de dockerfile
Martin Woolstenhulme
14
Je pense que c'est une réponse plus appropriée à la question
Juan Leni
1
Notez que cela crée plusieurs couches (je pense?)
Sebi
Cela devrait être la réponse acceptée. Testé et peut confirmer que cela fonctionne
user1258361
43
RUN git clone http://username:password@url/example.git
WORKDIR /folder
RUN make
Alfonsoolavarria
la source