Docker: RUN cd … no funciona como se esperaba

El siguiente Dockerfile:


 DESDE ubuntu: 12.10
 EJECUTAR mkdir tmp123
 EJECUTAR cd tmp123
 EJECUTAR pwd

tiene la salida:


 Cargando context 10240 bytes
 Paso 1: DESDE ubuntu: 12.10
  ---> b750fe79269d
 Paso 2: EJECUTAR mkdir tmp123
  ---> Corriendo en d2afac8a11b0
  ---> 51e2bbbb5513
 Paso 3: ejecutar cd tmp123
  ---> Corriendo en 4762147b207c
  ---> 644801121b92
 Paso 4: EJECUTAR pwd
  ---> Ejecutando en 3ed1c0f1049d
 /
  ---> eee62a068585

cuando se construye (command docker build)

parece que RUN cd tmp123 no tiene efecto

por qué ?

En realidad se espera.

Un dockerfile no es más que un contenedor de Docker run + docker commit.

FROM ubuntu:12.10 RUN mkdir tmp123 RUN cd tmp123 RUN pwd 

Es lo mismo que hacer:

 CID=$(docker run ubuntu:12.10 mkdir tmp123); ID=$(docker commit $CID) CID=$(docker run $ID cd tmp123); ID=$(docker commit $CID) CID=$(docker run $ID pwd); ID=$(docker commit $CID) 

Cada vez que ejecuta, genera un nuevo contenedor y, por lo tanto, el pwd es '/'.

Si lo desea, puede abrir un problema en github para agregar una instrucción CHDIR a Dockerfile.

Puede ser que puedas probar esto, no estoy seguro. Y no puedo intentarlo Si no funciona, no espere ningún voto negativo.

Sólo:

 RUN 'cd tmp123 ; pwd' 

En lugar de

 RUN cd tmp123 RUN pwd