来自dockerimage:最新拉错图像

来自dockerimage:最新拉错图像,docker,gitlab,Docker,Gitlab,我有一个使用gitlab ci管道构建的客户端web/base映像: 6天前最新的c4fba30df 204.03 MiB 版本2 c4fba30df 204.03 MiB 6天前 2个月前的版本_1 7904a77c0 153.69 MiB 这些是my docker repository中的图像:如您所见,标记为latest的图像实际上是最新的图像,与标记为version_2的图像具有相同的图像id(c4fba30df) 我构建了另一个构建在基础映像之上的映像: FROM gitlab.f

我有一个使用gitlab ci管道构建的客户端web/base映像:

  • 6天前最新的c4fba30df 204.03 MiB
  • 版本2 c4fba30df 204.03 MiB 6天前
  • 2个月前的版本_1 7904a77c0 153.69 MiB
这些是my docker repository中的图像:如您所见,标记为latest的图像实际上是最新的图像,与标记为version_2的图像具有相同的图像id(c4fba30df)

我构建了另一个构建在基础映像之上的映像:

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是版本_1,所以旧的图像id

我是不是把最新的标签弄错了

我知道很多人误用了最新版本,但在这种情况下,我觉得我有一个CI,它总是构建我的基础图像,并用以下标记两次:

  • 实际标签
  • 最新标签

base是您的项目名称吗

gitlab.example.com:port/user/projectname:latest

这是全文


正常情况下,当您运行
docker
图像时,您的版本2和最新版本具有相同的图像id

,或者如果docker文件是从图像构建的,并且docker认为它已经在本地拥有该图像,它将使用它已经拥有的图像。在你的例子中,因为你已经有了一个
..:最新的
版本,Docker只是使用它;它永远不会检查在其他地方是否存在具有相同标记的图像的不同版本

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

FROM gitlab.faccousa.net:4567/faccos/client-web/base:version_2
但是,如果您有很多从属映像,并且基本映像经常更改,那么维护这些映像可能会变得很麻烦

另一个选项是告诉您每次尝试
--拉取
基本图像

docker build --pull -t ... .

如果远程存储库不可用,则此构建将失败,即使基本映像没有更改,构建也会花费更长的时间。

您是否尝试过
docker build--无缓存
?我正在进行docker build--无缓存:docker build--无缓存--文件dockerfile.services--tag$image\u tag\u services:latest--tag$tag--label version=$DATE.我怀疑CI机器没有提取映像,能否在生成之前添加一个步骤以在本地删除最新映像
docker rmi gitlab.faccusa.net:4567/faccos/client-web/base:latest
如果此问题得到解决,您还可以尝试使用--pull构建
docker,无需运行
rmi
。您所需要的就是
pull
命令。执行
rmi
将强制每次执行新的拉取操作,即使您已经将映像放在本地,也会减慢构建速度并增加不必要的网络流量。