“ docker build --pull”的目的是什么?

Jim*_*Aho 6 docker

在构建docker映像时,通常使用docker build .

但是我发现您可以指定--pull,所以整个命令看起来像docker build --pull .

我不确定的目的--pull。Dockers的官方文档说“总是尝试提取该映像的新版本”,在这种情况下,我不确定这意味着什么。

您用于docker build构建新映像,并最终将其发布到容器注册表的某个位置。您为什么要拉一些尚不存在的东西?

我希望可以在Web上轻松找到像“简单”这样的东西,但是似乎没有人有与此类似的问题。Google上唯一真正的成功是指Dockers官方文档,我(如上所述)不了解。

谢谢你的帮助!

Ant*_*ile 59

它将拉取任何基本映像的最新版本,而不是重用您在本地已标记的任何内容

以基于移动标签(例如ubuntu:bionic)的图像为例。上游会定期进行更改和重建,但您可能在本地拥有几个月前的图像。docker 会很高兴地在旧基地上建造。 --pull将作为副作用进行拉动,因此您可以针对最新的基础映像进行构建

通常最好的做法是使用它来尽快获取上游安全修复程序(而不是使用陈旧的、可能存在漏洞的映像)。尽管您必须权衡破坏性更改(如果您使用不可变标签,那么它没有区别)

  • 这是对“ubuntu:bionic”图像的一个很好的解释,因为它(显然)没有附加版本,但每当他们发布新图像时仍然会有所不同。一切都有道理。谢谢! (2认同)
  • @learning2learn答案是肯定的,docker镜像的标签只是一个字符串,所以“0.1.0”与答案“bionic”中的示例没有什么不同 (2认同)

Sou*_*jee 12

Docker 允许将\xc2\xa0 --pull\xc2\xa0flag 传递到\xc2\xa0 docker build,例如\xc2\xa0 docker build . --pull -t myimage。这是推荐的方法,以确保构建始终使用最新的容器映像,尽管本地有可用的版本。不过还有一点值得一提:

\n\n

为了确保您的构建完全重建,包括检查基础映像是否有更新,请在构建时使用以下选项:

\n\n

--no-cache\xc2\xa0 - 这将强制重建已经可用的层。

\n\n

因此,完整的命令将如下所示:

\n\n

docker build . --pull --no-cache --tag myimage:version

\n\n

相同的选项可用于docker-compose

\n\n

docker-compose build --no-cache --pull

\n

  • 在正常使用中,您不需要“--no-cache”。如果更新了基础镜像(并且 `--pull` 获得了新版本),则会自动使缓存失效;类似地,如果您“复制”不同的代码,将使缓存失效。这通常会影响的唯一事情是,如果您正在对网络托管的软件包执行诸如“apt-get install”之类的操作,在这种情况下,“--no-cache”将导致它检查更新版本,即使基础镜像尚未更新。 (13认同)