前一篇文章中,我简述了CentOS下安装旧版本软件的方法,该文章以kubeadm为例完成了安装,但不久后我发现该方法对Docker不奏效,需要额为的操作。因此我撰写这篇补充的文章,专门介绍如何安装旧版本Docker。

0x01 测试

按照上一篇文章的方法,我们分别使用以下命令进行旧版本的安装:

yum search docker-ce
yum list docker-ce --showduplicates
yum install docker-ce-17.03.0.ce-1.el7.centos

但在最后一步执行过程中,却出现了如下所示的错误:

错误:软件包:docker-ce-17.03.0.ce-1.el7.centos.x86_64 (docker-ce-stable)
          需要:docker-ce-selinux >= 17.03.0.ce-1.el7.centos
          可用: docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch (docker-ce-stable)
              docker-ce-selinux = 17.03.0.ce-1.el7.centos
          可用: docker-ce-selinux-17.03.1.ce-1.el7.centos.noarch (docker-ce-stable)
              docker-ce-selinux = 17.03.1.ce-1.el7.centos
          可用: docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch (docker-ce-stable)
              docker-ce-selinux = 17.03.2.ce-1.el7.centos
          可用: docker-ce-selinux-17.03.3.ce-1.el7.noarch (docker-ce-stable)
              docker-ce-selinux = 17.03.3.ce-1.el7
 您可以尝试添加 --skip-broken 选项来解决该问题
 您可以尝试执行:rpm -Va --nofiles --nodigest

0x02 错误分析与初步尝试

根据错误信息,我们可以初步断定错误出在软件包冲突上。通常解决冲突的方法是在安装过程中显式声明需要安装的依赖包,例如上面所需要的是docker-ce-selinux >= 17.03.0.ce-1.el7.centos软件包,那我们就进行显式安装:

yum -y install docker-ce-17.03.0.ce-1.el7.centos docker-ce-selinux-17.03.0.ce-1.el7.centos

但执行该命令之后,依旧出现了上述错误。

0x03 进一步错误分析与尝试

仔细阅读安装过程的日志,我发现了一行奇怪的提示:软件包 docker-ce-selinux 已经被 docker-ce 取代,改为尝试安装 3:docker-ce-18.09.7-3.el7.x86_64

难怪显式安装也会提示依赖错误!

知道错误发生的原因,要解决它就很简单了,既然提示被取代,那么就一定有方法解除取代的重定向。

通过查阅yum的文档,我发现了一个参数:--setopt=obsoletes=0,只要在安装的命令后附上该参数,即可无视取代的重定向,强制进行相关软件包的安装。

最后的命令如下:

yum -y install docker-ce-17.03.0.ce-1.el7.centos docker-ce-selinux-17.03.0.ce-1.el7.centos --setopt=obsoletes=0

果然安装成功!