如何在Fedora 32或31上安装Docker(及替代品)

Fedora 31已切换到cgroup v2。这是第一个主要的Linux发行版。但是,Docker不支持cgroup v2,并且不能与最新的Fedora版本一起使用。本文介绍了选项以及如果您不喜欢Docker的替代方法,以及如何在Fedora 31上安装Docker。 [[Edit] 这最初是针对Fedora 31的,但是本文的所有内容也适用于Fedora 32。 Fedora 32没有Docker CE存储库,但是我们将使用Fedora 31存储库。小组 控制组是一种Linux内核功能,它按层次结构组织进程,并以可控和可配置的方式沿层次结构分配系统资源。 cgroup v2 它首先出现在Linux内核4.5中,与v1不同,它只有一个进程层次结构,并且在进程之间进行区分,而不是线程。我建议阅读 本文 Fedora 31和对照组v2。
Docker停止工作,因为Fedora 31(和Fedora 32)切换到了cgroups v2。例如,当尝试使用Docker运行容器时,该错误在Fedora 31系统上弹出。

docker: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "process_linux.go:297: applying cgroup configuration for process caused "open /sys/fs/cgroup/docker/cpuset.cpus.effective: no such file or directory"": unknown.

在Fedora 32上,出现此错误。

docker: Error response from daemon: cgroups: cgroup mountpoint does not exist: unknown.

那么,如果Fedora 32和31使用cgroups v2并且Docker停止工作怎么办?下面有几个选项,包括安装Docker CE的解决方法。和往常一样,所有说明在发布到Linux Uprising之前都经过了测试。Pod Manager工具 (Podman)是RedHat支持的与cgroup v2兼容的容器引擎,它实现了几乎所有的Docker CLI命令,并且不需要守护程序来运行容器和pod。这是Fedora推荐的选项。
Podman默认安装在Fedora 32和31上,因此您不需要任何使用。赶紧跑 podman 代替 docker,例如:

podman run --rm hello-world:latest

选项#2:切换到cgroup v1并在Fedora 32或31上安装并使用Moby Engine或Docker CE

切换到cgroup v1。

除了使用Podman(选项1)之外,您还可以通过传递内核参数来将Fedora 32或31系统切换到cgroup v1。 systemd.unified_cgroup_hierarchy=0
可以从命令行(永久)执行此操作,如下所示:

sudo dnf install grubby

sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=0"

此后,重新引导系统,您将获得使用以下选项之一的选项: moby-engine (包括Docker CLI和Docker Engine)或Docker CE。
如果要稍后撤消此更改,请传递内核参数。 systemd.unified_cgroup_hierarchy 有或没有参数 true 作为争论。这样可以重新启用统一的cgroup层次结构(cgroup v2)。例:

sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy"

使用moby-engine而不是Docker。

Docker已从Fedora 32和31中删除, moby-engine (但尚不支持cgroups v2)。如果您不熟悉Moby和Docker之间的关系, 本文
安装 moby-engine 在Fedora 32或31(包括Docker CLI和Docker Engine)上启用并启动守护程序。使用以下内容:

sudo dnf install moby-engine

sudo systemctl enable --now docker

另外,用户 docker 由于它是一个组,因此您无需以超级用户权限运行它。

sudo usermod -aG docker $(whoami)

之后,您将需要重新启动系统才能使用 moby-engine 没有超级用户权限(例如: sudo)。
现在您可以使用 moby-engine 例如Docker,例如:

docker run --rm hello-world:latest

LazyDocker:新的Docker和Docker Compose终端用户界面

如何在Fedora 32或31上安装Docker CE?

最喜欢的 moby-engine,Docker Engine-Community不支持cgroup v2,请按照之前的说明切换到cgroup v1。如果使用Docker CE安装则删除 moby-engine 如果先前已安装:

sudo dnf remove moby-engine

现在,您可以添加Docker CE Fedora存储库。

  • 对于Fedora 31:
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
  • 对于Fedora 32(我使用Fedora 31存储库,因为Fedora 32没有Docker CE存储库):
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo

sudo sed -i 's/$releasever/31/g' /etc/yum.repos.d/docker-ce.repo

现在,您可以在Fedora 32和31上都安装Docker CE(这将 docker-ce-clicontainerd.io),启用守护程序并启动它。

sudo dnf install docker-ce

sudo systemctl enable --now docker

另外,用户 docker 由于它是一个组,因此不必以超级用户权限运行Docker。

sudo usermod -aG docker $(whoami)

然后,您将需要重新引导系统以使用没有超级用户特权的Docker(例如: sudo)。附加的Fedora 32步骤:(使用from from修复Docker容器中的网络 这里 -这表明在Fedora 32上,可以从Docker容器中ping通到目标,但是tcp / udp连接不起作用,但是直到现在ping都不起作用。

firewall-cmd --permanent --zone=trusted --add-interface=docker0

firewall-cmd --reload

其他来源(文章中已链接的来源除外):

Sidebar