¿Cambiar comando de directorio en Docker?

214

En docker quiero hacer esto:

git clone XYZ
cd XYZ
make XYZ

Sin embargo, debido a que no hay un comando de CD, tengo que pasar la ruta completa cada vez (hacer XYZ / ruta completa). ¿Alguna buena solución para esto?

RParadox
fuente
66
El comando WORKDIR también se observa como una posible solución alternativa
publica el
1
No es una solución alternativa, es la solución recomendada docs.docker.com/engine/userguide/eng-image/…
John John Pichler

Respuestas:

151

Puede ejecutar un script o un parámetro más complejo para EJECUTAR. Aquí hay un ejemplo de un Dockerfile que he descargado para verlo anteriormente:

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

Debido al uso de '&&', solo llegará al comando final 'pip install' si todos los comandos anteriores han tenido éxito.

De hecho, dado que cada RUN crea una nueva confirmación y (actualmente) una capa AUFS, si tiene demasiados comandos en el Dockerfile, usará los límites, por lo que fusionar las RUN (cuando el archivo es estable) puede ser muy difícil. Lo útil para hacer.

Alister Bulman
fuente
98
En caso de que te lo estés preguntando, el efecto de la cdúnica dura para el RUNcomando actual . El siguiente RUNcomenzará desde el actual WORKDIR.
Ritchie
531

Para cambiar a otro directorio, use WORKDIR . Todos los comandos RUN, CMD y ENTRYPOINT después de WORKDIR se ejecutarán desde ese directorio.

RUN git clone XYZ 
WORKDIR "/XYZ"
RUN make
Javier Castellanos
fuente
40
El uso de WORKDIR también se cita como una mejor práctica de dockerfile
Martin Woolstenhulme el
14
Creo que esta es una respuesta más apropiada a la pregunta
Juan Leni
1
Tenga en cuenta que esto crea múltiples capas (¿creo?)
Sebi
Esta debería ser la respuesta aceptada. Probado y puedo confirmar que funciona
user1258361
43
RUN git clone http://username:password@url/example.git
WORKDIR /folder
RUN make
alfonsoolavarria
fuente