FROM dockerimage:latest提取错误的图像

时间:2019-01-30 08:15:23

标签: docker gitlab

我有一个使用gitlab ci管道构建的客户端网络/基本映像:

  • 最新c4fba30df 204.03 MiB 6天前
  • version_2 c4fba30df 204.03 MiB 6天前
  • version_1 7904a77c0 153.69 MiB 2个月前

这些是我的docker存储库中的图像:如您所见,标签为最新的图像实际上是最新的图像,其图像ID(c4fba30df)与标签为version_2的图像相同。

我在基础图像之上构建另一个图像:

FROM gitlab.faccousa.net:4567/faccos/client-web/base:latest
...
...
...

昨天,我构建了上面的图像文件,看起来好像发生了以下情况:

Step 1/6 : FROM gitlab.faccousa.net:4567/faccos/client-web/base:latest
  ---> 7904a77c0

但是7904a77c0是version_1,因此图像ID较旧。

我对最新标签有误吗?

我知道最新消息被很多人滥用,但是在这种情况下,我觉得自己有一个配置项,始终会构建我的基础映像并用两次标记两次:

  • 实际标签
  • 最新标签

2 个答案:

答案 0 :(得分:2)

当您docker run映像时,或者如果构建Dockerfile FROM映像,并且Docker认为它已经在本地拥有映像,它将使用已拥有的映像。在您的情况下,由于您已经拥有...:latest版本,因此Docker仅使用它。它永远不会检查图像的其他版本是否可能在其他位置带有相同的标签。

最可靠的方法是永远不要在任何地方使用:latest标签:

FROM gitlab.faccousa.net:4567/faccos/client-web/base:version_2

但是,如果您有很多相关的图像,并且基本图像有规律地发生变化,那么维护该图像可能会很麻烦。

另一种选择是告诉docker build每次尝试--pull基本图像

docker build --pull -t ... .

不利之处在于,如果远程存储库不可用,此构建将失败,即使基本映像未更改,构建也将花费更长的时间。

答案 1 :(得分:-1)

您的项目名称是基数吗?

  

gitlab.example.com:端口/用户/项目名称:最新

这是完整的guide

通常您的version_2和最新版具有相同的图像ID