【问题标题】:How can I prevent Docker from removing intermediate containers when executing RUN command?如何防止 Docker 在执行 RUN 命令时删除中间容器?
【发布时间】:2021-02-15 17:10:41
【问题描述】:

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

DOCKERFILE

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

如何防止 Docker 这样做?

【问题讨论】:

  • 似乎您已将一些不可运行的图像附加到您的问题而不是您的 Dockerfile 中。你能用你的 Dockerfile 的实际文本和输出的实际文本替换这些图像吗?

标签: docker docker-compose dockerfile docker-machine


【解决方案1】:

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

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

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

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

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

多行:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      docker build --rm=false

      成功构建后移除中间容器(默认为 true)

      【讨论】:

        猜你喜欢
        • 2021-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多