Docker : RUN cd … does not work as expected [dupli

2019-01-22 06:34发布

The following Dockerfile :


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

has the output :


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

when built (docker build command)

it appears that RUN cd tmp123 has no effect

why ?

标签: docker
2条回答
Deceive 欺骗
2楼-- · 2019-01-22 06:40

Maybe you can try this; I am not sure and I can't try it. If it does not work, I hope you don't downvote.

Just:

RUN 'cd tmp123 ; pwd'

Instead of

RUN cd tmp123
RUN pwd
查看更多
\"骚年 ilove
3楼-- · 2019-01-22 06:54

It is actually expected.

A dockerfile is nothing more but a wrapper on docker run + docker commit.

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

Is the same thing as doing:

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)

Each time you RUN, you spawn a new container and therefore the pwd is '/'.

If you feel like it, you can open an issue on github in order to add a CHDIR instruction to Dockerfile.

查看更多
登录 后发表回答