我遇到的错误是我想在我的 Docker 机器中执行“更改目录”命令,但是每次我在我的 Dockerfile 中执行 RUN 指令时,它都会删除实际的容器(中间容器)。
DOCKERFILE
当我从上面执行 Dockerfile 时会发生这种情况
如何防止 Docker 这样做?
答案 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 删除中间容器并不重要,在这种情况下这不是问题。)