67

以下 Dockerfile :

来自 ubuntu:12.10
运行 mkdir tmp123
运行 cd tmp123
运行密码

有输出:

上传上下文 10240 字节
第 1 步:来自 ubuntu:12.10
 ---> b750fe79269d
第 2 步:运行 mkdir tmp123
 ---> 在 d2afac8a11b0 中运行
 ---> 51e2bbbb5513
第 3 步:运行 cd tmp123
 ---> 在 4762147b207c 中运行
 ---> 644801121b92
第 4 步:运行密码
 ---> 在 3ed1c0f1049d 中运行
/
 ---> eee62a068585

构建时(docker build 命令)

看来 RUN cd tmp123 没有效果

为什么 ?

4

2 回答 2

108

它实际上是预期的。

dockerfile 只不过是 docker run + docker commit 的包装器。

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

与做同样的事情:

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)

每次运行时,都会生成一个新容器,因此 pwd 是“/”。

如果您愿意,可以在 github 上打开一个问题,以便将 CHDIR 指令添加到 Dockerfile。

于 2013-07-26T22:52:07.750 回答
26

也许你可以试试这个;我不确定,也无法尝试。如果它不起作用,我希望你不要投票。

只是:

RUN 'cd tmp123 ; pwd'

代替

RUN cd tmp123
RUN pwd
于 2013-07-26T23:25:39.313 回答