我有一个用于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
答案 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
答案 2 :(得分:0)
user8475213的回答对我有用。但是我还必须遵循以下命令:
yum clean metadata
答案 3 :(得分:0)
似乎 azure 依赖于 container-tools
模块中的包,而 Docker 与这些包发生冲突。
# dnf remove @container-tools