Centos8安装Docker报错解决方案

在Centos8中,默认安装的的容器管理工具是使用了Podman,Podman的设计理念非常好,整合了pod思想,用户可以直接启动容器而不是像Docker那样通过守护进程启动,这样也会提高安全性。但是现在Podman国内使用的人数并不是很多,还会有一些问题出现。所以在Centos8上先将Podman替换为Docker。在Centos8下安装Docker会有container.io的依赖问题,现在来解决一下。

但是要注意的是,在Centos8中使用Docker启动容器的话,容器内默认的网络是不通的,需要简单的配置。在这一篇文章中Centos8安装Docker后容器内无法访问网络提供了解决办法。

简要概括

思路是卸载podman,安装docker-ce的repo源,解决依赖,安装完成,启动服务就是这样了。

卸载podman

dnf remove -y podman

安装docker-ce官方源

首先我们添加docker-ce官方的源,这样才能用到最新版本的Docker。

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

之后更新一下列表和依赖

dnf update -y

如果在update过程中提示添加GPG密钥,yes通过即可。稍稍等待一会吧。

解决依赖问题

如果安装完官方源后,直接安装docker-cecontainerd.io这个包会出现版本依赖的问题,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@DELL ~]dnf install docker-ce docker-ce-cli
Last metadata expiration check: 0:09:11 ago on Sat 21 Mar 2020 04:17:47 PM CST.
Error:
Problem: package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
- cannot install the best candidate for the job
- package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
- package containerd.io-1.2.13-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.el7.x86_64 is excluded
- package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.6-3.3.el7.x86_64 is excluded
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

解决方案有两个,要么安装老版本的docker-ce,要么升级container.io。我肯定选择第二个,问题形成的原因也很简单,官方的repo源里面的container.io版本比较老。我们去下载一个符合版本要求的container.io包。

dnf install -y https://download.docker.com/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

一条毒奶粉(dnf)命令直接安装目前最新的container.io 包。哦对了,该包来源于Docker官方,下载的是x86_64架构的包。如果你是其他平台,请到这儿里自己来选吧。

安装docker-ce

container.io的依赖问题已经解决完了,接下来直接安装就好了!

dnf install -y docker-ce docker-ce-cli

开启服务

systemctl enable --now docker

成功安装后开启docker守护进程,尝试一下启动一个容器。没有问题的话就是安装成功了。但是要注意的是,如果你发现在容器内部无法访问网络,那么你可以尝试一下用firewalld开启你的IP地址转发功能,具体操作和解决方案在这里Centos8安装Docker后容器内无法访问网络


我是一名Linux初学者,如果你与我一样喜欢折腾,喜欢Linux,那么请加入我的电报群https://t.me/yeefire_blog,在这里畅所欲言,共同学习进步。