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

Azure 在CentOS 7上安装docker ce时moby软件包出现问题,azure,docker,centos7,moby,Azure,Docker,Centos7,Moby,我有一个CentOS 7的docker映像,它通过安装docker ce。 i、 e 最近,此功能停止工作,现在出现以下故障: --> 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 Depen

我有一个CentOS 7的docker映像,它通过安装docker ce。 i、 e

最近,此功能停止工作,现在出现以下故障:

--> 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
如果将安装命令替换为:

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

警告:通常免责声明适用。这只是我的想法,我可能弄错了。如果有,请评论/建议编辑

我如何修复它?

这实际上是回购协议的baseurl的问题,而不是docker ce回购协议的问题(尽管我最初确实在那里提交了一份错误报告(参见问题)

moby软件包来自“微软com产品包”。 基本URL似乎已更改。 正确的答案是:

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
RUN rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
那些不可靠的软件包是:

baseurl=https://packages.microsoft.com/centos/7/prod/
安装方式:

RUN curl https://packages.microsoft.com/config/rhel/7/prod.repo >/etc/yum.repos.d/microsoft-prod.repo
RUN rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
moby软件包只存在于CentOS repo中,该软件包可能已经失效,因为微软自己已经在不同的地方更改了安装文档

还有一个解决方法。您可以排除“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文件使用的存储库本身就是环境的一部分。如果环境发生了变化(如本例中所示),则您的可复制构建可能不再是可复制的。避免这种情况的唯一真正方法是托管您自己的dockerepositories的价格很高。通常外部存储库足够稳定,所以这不是问题


您应该考虑指定特定版本的包以安装在DoCKFLE文件中以避免意外升级。但是,在包被废弃和替换的情况下,这将无法帮助您。

>请注意:通常免责声明适用。这只是我想的,我可能错了。请评论/建议编辑如果这样做的话。

我如何修复它?

这实际上是回购协议的baseurl的问题,而不是docker ce回购协议的问题(尽管我最初确实在那里提交了一份错误报告(参见问题)

moby软件包来自“微软com产品包”。 基本URL似乎已更改。 正确的答案是:

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
RUN rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
那些不可靠的软件包是:

baseurl=https://packages.microsoft.com/centos/7/prod/
安装方式:

RUN curl https://packages.microsoft.com/config/rhel/7/prod.repo >/etc/yum.repos.d/microsoft-prod.repo
RUN rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
moby软件包只存在于CentOS repo中,该软件包可能已经失效,因为微软自己已经在不同的地方更改了安装文档

还有一个解决方法。您可以排除“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文件使用的存储库本身就是环境的一部分。如果环境发生了变化(如本例中所示),则您的可复制构建可能不再是可复制的。避免这种情况的唯一真正方法是托管您自己的dockerepositories的价格很高。通常外部存储库足够稳定,所以这不是问题


您应该考虑指定特定版本的包以安装在Doc文件中以避免意外升级。但是,在包被过时和替换的情况下,这对您没有帮助。

我的回购需要更新。
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

我的回购协议需要更新——以下问题解决了我的问题:

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

用户8475213的回答对我很有效。但我也必须按照以下命令运行:

yum clean metadata

来自user8475213的答案对我很有用。但我还必须按照以下命令运行:

yum clean metadata
RHEL 8中的相关问题 azure似乎依赖于
容器工具
模块中的包,Docker与这些包冲突

# dnf remove @container-tools
RHEL 8中的相关问题 azure似乎依赖于
容器工具
模块中的包,Docker与这些包冲突

# dnf remove @container-tools

你是对的。我在别处发现了这个问题,并更新了我的答案以确保完整性。事实上,我的答案在技术上是错误的,所以我不得不接受你的答案,尽管我的答案现在更好:)你是对的。我在别处发现了这一点,并更新了我的答案以确保完整性。事实上,我的答案在技术上是错误的,所以我不得不接受你的答案,尽管我的答案现在更好了:)你也许应该加上一个解释,说明为什么这一步对你有效。在帮助原始海报,为什么这个答案会有意义上,有很大的帮助。你也许应该添加一个解释,为什么这个