311

在码头我想这样做:

git clone XYZ
cd XYZ
make XYZ

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

4

5 回答 5

693

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

RUN git clone XYZ 
WORKDIR "/XYZ"
RUN make
于 2014-11-04T03:20:57.040 回答
225

你可以运行一个脚本,或者更复杂的参数给RUN。这是我之前下载的 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 中的命令太多,就会耗尽限制,因此合并 RU​​N(当文件稳定时)可能是一个非常有用的事情。

于 2013-12-17T11:13:53.343 回答
12

我想知道两次WORKDIR是否有效,但它有效:)

FROM ubuntu:18.04

RUN apt-get update && \
    apt-get install -y python3.6

WORKDIR /usr/src

COPY ./ ./

WORKDIR /usr/src/src

CMD ["python3", "app.py"]
于 2021-02-01T18:51:22.453 回答
1

您可以对所有这些使用单个 RUN 命令

RUN git clone XYZ && \
    cd XYZ && \
    make XYZ
于 2021-09-25T07:26:00.473 回答
0
于 2021-03-21T15:00:46.657 回答