执行 RUN 命令时如何防止 Docker 删除中间容器?

时间:2021-02-15 17:10:41

标签: docker docker-compose dockerfile docker-machine

我遇到的错误是我想在我的 Docker 机器中执行“更改目录”命令,但是每次我在我的 Dockerfile 中执行 RUN 指令时,它都会删除实际的容器(中间容器)。

DOCKERFILE

enter image description here

当我从上面执行 Dockerfile 时会发生这种情况

enter image description here

如何防止 Docker 这样做?

2 个答案:

答案 0 :(得分:1)

当您使用 docker build --no-cache 时,这将在您构建映像时删除中间容器。当您多次运行 build 时,这可能会影响构建时间。或者,您可以选择使用 \ 将多个 shell 命令放入一个 shell 命令中,然后将其用作 RUN 参数。 可以找到微尘提示here

答案 1 :(得分:1)

Dockerfile 和 RUN(容器内)的当前路径不同。

每个 RUN 命令都从 Dockerfile 路径(例如“/”)开始。

当您执行 RUN cd /app 时,“内部路径”会改变,但“Dockerfile 路径”不会。下一个 RUN 命令将再次在“/”处运行。

要更改“Dockerfile 路径”,请使用 WORKDIR(请参阅 reference),例如 WORKDIR /opt/firefox

另一种方法是链接执行的 RUN 命令,正如 EvgeniySharapov 指出的那样:RUN cd opt; ls; cd firefox; ls

多行:

RUN cd opt; \
    ls; \
    cd firefox; \
    ls

(澄清:Docker 删除中间容器并不重要,在这种情况下这不是问题。)