web-dev-qa-db-fra.com

Changer de commande de répertoire dans Docker?

En docker je veux faire ceci:

git clone XYZ
cd XYZ
make XYZ

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

170
RParadox

Vous pouvez exécuter un script ou un paramètre plus complexe pour exécuter. Voici un exemple extrait d'un fichier Dockerfile que j'ai téléchargé:

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 '&&', la dernière commande 'pip install' ne sera transmise que si toutes les commandes précédentes ont abouti.

En fait, étant donné que chaque exécution crée un nouveau commit et (actuellement) une couche AUFS, si vous avez trop de commandes dans le fichier Docker, vous utiliserez les limites. La fusion des exécutions (lorsque le fichier est stable) peut donc s'avérer très complexe. chose utile à faire.

115
Alister Bulman

Pour changer de 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
427
RUN git clone http://username:password@url/example.git
WORKDIR /folder
RUN make
30
alfonsoolavarria