发生错误后继续生成Docker映像

发生错误后继续生成Docker映像,docker,Docker,我有一个Dockerfile,在上面安装Ubuntu和一些软件包,然后继续使用这些软件包。假设我需要运行“wget”命令,但忘记了发布“wget”包的安装。我添加了要安装的包命令并继续执行。然而,我必须重新开始-安装Ubuntu,安装软件包,等等,还是这样?是否有能力将我所做的保存到错误发生,并在我完成修复后从该点继续,而不是再次下载所有内容?有时在这种情况下,您可能需要将构建细分为一系列图像。每个后续步骤都会在FROM命令中选择上一个步骤。只是为了指出David Maze的答案最适合我的情况:

我有一个Dockerfile,在上面安装Ubuntu和一些软件包,然后继续使用这些软件包。假设我需要运行“wget”命令,但忘记了发布“wget”包的安装。我添加了要安装的包命令并继续执行。然而,我必须重新开始-安装Ubuntu,安装软件包,等等,还是这样?是否有能力将我所做的保存到错误发生,并在我完成修复后从该点继续,而不是再次下载所有内容?

有时在这种情况下,您可能需要将构建细分为一系列图像。每个后续步骤都会在FROM命令中选择上一个步骤。

只是为了指出David Maze的答案最适合我的情况:


任何时候任何更改都不会缓存后面的步骤。既然你有副本/相机很早就在Dockerfile中运行,下面运行得到。。。如果源代码树中有任何更改,则将变为不可缓存。我以后再谈


这就是我在错误的位置使用COPY命令的原因,这很有意义-我在解析所需内容之前复制了docker积累的所有内容,因此每次构建映像时,我都会在复制之后停止执行所有指令。在我按照David的建议向下移动副本后,所有缓存的数据都在那里。

对于这个实例,有时您可能需要将构建细分为一系列图像。每个后续步骤都会在FROM命令中选择上一个步骤。如果重新运行
docker build
,它将跳过已经完成的步骤。例如,请参阅。@DavidMaze这很有趣,因为它看起来好像每次我构建docker时,它都是全新开始的。可能是我没有发出足够的命令?据我所知,缓存是自动的。这是我的Dockerfile任何时候有任何更改,后面的步骤都不会被缓存。既然你有
拷贝/camera
在Dockerfile的早期,如果源代码树中有任何更改,则以下
运行apt get…
将变得不可缓存。我以后再谈。