首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CentOS 7上安装docker-ce时moby软件包的问题

在CentOS 7上安装docker-ce时moby软件包的问题
EN

Stack Overflow用户
提问于 2020-07-29 23:15:58
回答 4查看 4K关注 0票数 3

我有一个CentOS 7的对接图像,它通过推荐指令安装对接器-ce。即

代码语言:javascript
复制
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

最近,它停止工作,现在失败了,如下所示:

代码语言:javascript
复制
--> 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命令替换为:

代码语言:javascript
复制
yum install -y docker

对于一个未签名的包,我有一个不同的错误:

代码语言:javascript
复制
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

我试着强制使用几个旧版本,如下所示,但没有效果。

代码语言:javascript
复制
RUN yum install -y docker-1.13.1-102.git7f2769b.el7.centos

为什么会发生这种情况?我怎么才能修好它?我怎样才能防止将来出现类似的问题?

更新:这个问题中缺少的一个关键信息是Azure的使用。当aspnetcore需要在Azure devops管道中发布包时,我有以下内容:

代码语言:javascript
复制
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
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-08-02 21:50:55

我的回购需要更新--以下是我的解决办法:

代码语言:javascript
复制
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://learn.microsoft.com/en-us/windows-server/administration/linux-package-repository-for-microsoft-software

票数 6
EN

Stack Overflow用户

发布于 2020-09-22 09:02:02

user8475213的回答对我有用。但我也不得不执行这些命令:

代码语言:javascript
复制
yum clean metadata
票数 2
EN

Stack Overflow用户

发布于 2020-07-29 23:15:58

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

我怎样才能修好它?

这实际上是回购的基尔的问题,而不是停靠器-ce回购(虽然我最初在那里提交了一个错误报告(请参阅发布#11198)。

moby软件包来自“packages -”。看样子基尔变了。现在正确的答案是:

代码语言:javascript
复制
baseurl=https://packages.microsoft.com/rhel/7/prod/

安装方式:

代码语言:javascript
复制
RUN curl https://packages.microsoft.com/config/rhel/7/prod.repo >/etc/yum.repos.d/microsoft-prod.repo

有着诡异的包裹的是:

代码语言:javascript
复制
baseurl=https://packages.microsoft.com/centos/7/prod/

安装方式:

代码语言:javascript
复制
RUN rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

moby软件包只存在于可能已经失效的CentOS回购中,因为微软自己已经改变了不同地方的安装文档。

还有一个解决办法。您可以将“moby”包排除在外,直到它们真正准备就绪为止,如下所示:

代码语言:javascript
复制
RUN yum install -y docker --exclude=moby-\*

为什么会发生这种事?

我认为这是由于过分积极地推广moby的对接-ce功能的替代。希望这是一种暂时的状态,而他们正在解决问题。

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

如何防止将来出现类似的问题?

与流行的说法相反,使用码头并不能将你与环境的变化完全隔离开来。您的docker文件使用的存储库本身就是环境的一部分。如果环境发生了变化,就像在这种情况下一样,那么您的可复制构建可能不再是可重复的。避免这种情况的唯一真正方法是托管您自己的存储库,这需要付出很高的代价。通常,外部存储库是足够稳定的,因此这不是一个问题。

您应该考虑指定要安装在您的dockerfile中的软件包的特定版本,以避免意外升级。然而,在这样的情况下,在包被淘汰和替换的情况下,这将不会对您有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63163859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档