hyperledger/fabric-peer:不存在tag:latest

latest标签,是docker image的默认标签

官方文档:

To download a particular image, or set of images (i.e., a repository), use docker pull. If no tag is provided, Docker Engine uses the :latest tag as a default.
https://docs.docker.com/engine/reference/commandline/pull/#concurrent-downloads

按照当前的分支标签策略,在docker hub的fabric的镜像标签列表中,确实不存在默认标签
所以如果直接用命令$ docker pull image hyperledger/fabric-peer,会出现默认标签不存在的问题。
但是为什么有的朋友没遇到这个问题呢,这就要怪鸡贼的fabric安装脚本了

1
2
# 这里以1.0.2版本的脚本为例
curl -sSL https://goo.gl/Gci9ZX | bash

脚本出处
https://hyperledger-fabric.readthedocs.io/en/latest/samples.html#download-platform-specific-binaries

我们在浏览器打开https://goo.gl/Gci9ZX
可以看到这么一段代码

1
docker tag hyperledger/fabric-$IMAGES:$FABRIC_TAG hyperledger/fabric-$IMAGES

这代码的作用就是将本来的以$FABRIC_TAG为标签的image,重命名为没有标签的版本
而没有标签,按照docker的规定,就是以latest为标签

所以,脚本在docker pull image的过程当中,其实是有标签的,这个标签是$FABRIC_TAG,之后才将这个标签抹去

我个人是非常不支持这个做法的,虽然有在之后的compose文件里面不需要再指定标签的好处,可是一旦出了docker image版本问题,会更难调试。

而这个情况往往出现在在同一台机器上试运行不同的fabric样例时,由于样例之间的更新进度参差不齐,开发人员一不留神,就会在一个项目里面调用了另外一个版本的fabric image导致奇怪的出错
而使这种情况更糟糕的是

你可能需要半个多小时才下载下来的image,为了切换到别的项目,不得不被删除,然后再用到的时候,又要等半个多小时

更好的做法是

  • 不要直接运行脚本,将脚本当中下载image的部分分离开来单独操作
  • 在每一个需要用到fabric docker image的地方,都显式注明所需要的版本标签