在Docker中更改目录命令?


214

在泊坞窗中,我想这样做:

git clone XYZ
cd XYZ
make XYZ

但是,因为没有cd命令,所以我每次都必须传递完整路径(使XYZ / fullpath)。有什么好的解决方案吗?



6
WORKDIR命令也被视为可能的解决方法
trcarden 2014年

1
不是一个解决方法,它是推荐的解决方案docs.docker.com/engine/userguide/eng-image/...
约翰约翰Pichler的

Answers:


151

您可以运行脚本,也可以运行更复杂的参数。这是我先前下载的Dockerfile中的示例:

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

由于使用了“ &&”,因此,如果所有先前的命令都成功,它将仅到达最终的“ pip install”命令。

实际上,由于每个RUN都会创建一个新的提交和AUFS层(当前),因此,如果Dockerfile中包含太多命令,您将用尽限制,因此合并RUN(当文件稳定时)可能是非常困难的。有用的事情。


98
如果您想知道,cd当前RUN命令的效果将持续到最后。下一个RUN将从当前开始WORKDIR
里奇

530

要切换到另一个目录,请使用WORKDIR。WORKDIR之后的所有RUN,CMD和ENTRYPOINT命令都将从该目录执行。

RUN git clone XYZ 
WORKDIR "/XYZ"
RUN make

40
使用WORKDIR也被称为dockerfile最佳实践
Martin Woolstenhulme

14
我认为这是对这个问题的更合适的答案
Juan Leni

1
请注意,这会创建多个图层(我想呢?)
Sebi

这应该是公认的答案。经过测试,可以确认它是否有效
user1258361

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.