Docker: EJECUTAR cd not no funciona como se esperaba [duplicar]


Esta pregunta ya tiene una respuesta aquí:

El siguiente archivo Dockerfile:


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

Tiene la salida :


Uploading context 10240 bytes
Step 1 : FROM ubuntu:12.10
 ---> b750fe79269d
Step 2 : RUN mkdir tmp123
 ---> Running in d2afac8a11b0
 ---> 51e2bbbb5513
Step 3 : RUN cd tmp123
 ---> Running in 4762147b207c
 ---> 644801121b92
Step 4 : RUN pwd
 ---> Running in 3ed1c0f1049d
/
 ---> eee62a068585

Cuando se construye (comando de compilación de docker)

Parece que ejecutar cd tmp123 no tiene efecto

¿Por qué ?

 30
Author: Max L., 2013-07-27

2 answers

En realidad se espera.

Un dockerfile no es más que un contenedor en 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 se EJECUTA, se genera un nuevo contenedor y, por lo tanto, el pwd es '/'.

Si te apetece, puedes abrir un problema en github para añadir una instrucción CHDIR al Dockerfile.

 59
Author: creack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-26 22:52:07

Tal vez puedas probar esto; no estoy seguro y no puedo probarlo. Si no funciona, espero que no downvote.

Solo:

RUN 'cd tmp123 ; pwd'

En lugar de

RUN cd tmp123
RUN pwd
 10
Author: Lidong Guo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-18 00:03:58