3

我有一个 CentOS 7 的 docker 映像,它通过推荐的说明安装 docker-ce 。IE

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

如果安装命令被替换为:

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 的使用。我有以下内容,因为在 Azure devops 管道中发布包需要 aspnetcore:

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

4 回答 4

6

我的仓库需要更新——以下解决了我:

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

于 2020-08-02T21:50:55.260 回答
2

user8475213 的回答对我有用。但我也必须在这些命令之后运行:

yum clean metadata
于 2020-09-22T09:02:02.410 回答
1

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

我该如何解决?

这实际上是 repo 的 baseurl 而不是 docker-ce repo 的问题(尽管我最初确实在那里提交了错误报告(请参阅问题#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-\*

为什么会这样?

我认为这是由于过度积极地推广 docker-ce 功能的 moby 替代品造成的。在他们解决问题时,希望这是一个短暂的状态。

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

我怎样才能防止将来出现类似的问题?

与流行的神话相反,使用 docker 并不能完全将您与环境的变化隔离开来。docker 文件使用的存储库本身就是环境的一部分。如果该环境发生变化,如本例所示,那么您的可重现构建可能不再是可重现的。避免这种情况的唯一真正方法是托管您自己的存储库,但价格很高。通常外部存储库足够稳定,这不是问题。

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

于 2020-07-29T23:15:58.543 回答
0

RHEL 8 中的相关问题

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

# dnf remove @container-tools
于 2021-05-05T03:04:15.767 回答