在CentOS 7上安装docker-ce时,moby软件包出现问题

时间:2020-07-29 23:15:58

标签: azure docker centos7 moby

我有一个用于CentOS 7的docker映像,该映像通过recommended instructions安装docker-ce。 即

RUN yum-config-manager \
  --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
RUN yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
RUN yum update -y
RUN yum install -y docker-ce docker-ce-cli containerd.io

最近这已停止工作,但现在失败,如下所示:

--> Processing Conflict: moby-containerd-1.3.6+azure-1.x86_64 conflicts containerd
--> Processing Conflict: moby-runc-1.0.0~rc10+azure-2.x86_64 conflicts runc
--> Finished Dependency Resolution
Error: moby-containerd conflicts with containerd.io-1.2.13-3.2.el7.x86_64
Error: moby-runc conflicts with containerd.io-1.2.13-3.2.el7.x86_64
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
The command '/bin/sh -c yum install -y docker-ce docker-ce-cli containerd.io' returned a non-zero code: 1

如果将install命令替换为:

yum install -y docker

对于未签名的程序包,我得到了另一个错误:

Package runc is obsoleted by moby-runc, trying to install moby-runc-1.0.0~rc10+azure-2.x86_64 instead
...
Package moby-runc-1.0.0~rc10+azure-2.x86_64.rpm is not signed

我尝试强制使用以下一些旧版本,例如无济于事。

RUN yum install -y docker-1.13.1-102.git7f2769b.el7.centos

为什么会这样?我该如何解决?以及将来如何预防类似问题?


更新:此问题中缺少的一个关键信息是使用Azure。我有以下内容,因为aspnetcore是在Azure devops管道中发布程序包所必需的:

RUN rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
RUN yum update -y && yum install aspnetcore-runtime-3.1 -y

4 个答案:

答案 0 :(得分:1)

注意事项:通常免责声明适用。这只是我的想法,我可能会误会。请这样评论/建议修改。

我该如何解决?

这实际上是存储库而不是docker-ce存储库的基本URL的问题(尽管我最初确实在此处提交了错误报告(请参阅问题#11198)。

moby软件包来自“ packages-microsoft-com-prod”。 看来baseurl已更改。 现在正确的是:

baseurl=https://packages.microsoft.com/rhel/7/prod/

通过以下方式安装:

RUN curl https://packages.microsoft.com/config/rhel/7/prod.repo >/etc/yum.repos.d/microsoft-prod.repo

带有躲避包的包裹是:

baseurl=https://packages.microsoft.com/centos/7/prod/

通过以下方式安装:

RUN rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

moby软件包仅存在于CentOS仓库中,该仓库可能已不存在,因为Microsoft本身已在各个地方更改了安装文档。

还有一个解决方法。您可以排除“ moby”软件包,直到它们像下面这样真正准备好:

RUN yum install -y docker --exclude=moby-\*

为什么会这样?

我认为这是由于过度积极地使用Moby替代docker-ce功能而引起的。 希望它们在解决问题时处于过渡状态。

未对软件包moby-runc-1.0.0~rc10+azure-2.x86_64.rpm进行签名表明所使用的构建过程存在问题。此软件包仅应提供给beta测试人员。当然不在标记为“稳定”的存储库中。

将来如何预防类似的问题?

与流行的说法相反,使用docker并不能使您完全不受环境变化的影响。 docker文件使用的存储库本身就是环境的一部分。如果在这种情况下环境发生了变化,则可复制的构建可能会不再具有可复制性。避免这种情况的唯一真正方法是托管您自己的存储库,价格高昂。通常,外部存储库足够稳定,因此这不是问题。

您应考虑指定要在dockerfile中安装的特定版本的软件包,以避免意外升级。但是,在像这样的情况下,如果某个包被废弃和替换了,那将无济于事。

答案 1 :(得分:1)

我的仓库需要更新---以下解决了我的问题:

curl https://packages.microsoft.com/config/rhel/7/prod.repo > ./microsoft-prod.repo
sudo cp ./microsoft-prod.repo /etc/yum.repos.d/
yum update -y

https://docs.microsoft.com/en-us/windows-server/administration/linux-package-repository-for-microsoft-software

答案 2 :(得分:0)

user8475213的回答对我有用。但是我还必须遵循以下命令:

yum clean metadata

答案 3 :(得分:0)

RHEL 8 相关问题

似乎 azure 依赖于 container-tools 模块中的包,而 Docker 与这些包发生冲突。

# dnf remove @container-tools
相关问题