[[Edit]]Docker 20.10 增加了对 cgroups v2 和 firewalld 的支持,所以这篇文章已经过时了。 关于如何安装 Docker Fedora,查看官方文档。
Fedora 31 切换到 cgroup v2,这是第一个这样做的主要 Linux 发行版。 Docker 不支持 cgroup v2,所以它不适用于最新的 Fedora 发布。 这篇文章解释了你的选择,以及如何安装 Docker Fedora 31 如果您不喜欢其他选择。 [[Edit] 这原本是为了 Fedora 31,但本文中的所有内容也适用于 Fedora 32; 没有 Docker CE 存储库 Fedora 32,但我们将使用 Fedora 31 存储库代替。
cgroup(控制组)是 Linux 内核功能,它按层次结构组织进程,并以受控和可配置的方式沿层次结构分配系统资源。 cgroup v2 首次出现在 Linux 内核 4.5 中,与 v1 不同,它只有一个进程层次结构,并区分进程,而不是线程。 我建议阅读这篇文章 Fedora 31和对照组v2。
自从 Fedora 31(和 Fedora 32) 切换到 cgroups v2,Docker 不再有效。 例如,这个错误在我的 Fedora 尝试使用 Docker 运行容器时的 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 之前,所有指令都经过了测试。
选项 #1:使用 Podman 而不是 Docker Fedora 32 或 31
Pod Manager 工具 (podman) 是一个 RedHat 支持的 cgroup v2 兼容容器引擎,它实现了几乎所有的 Docker CLI 命令,并且不需要守护进程来运行容器和 Pod。 这是 Fedora 推荐选项。
Podman 默认安装在 Fedora 32 和 31,因此您无需执行任何操作即可使用它。 赶紧跑 podman
代替 docker
,例如:
podman run --rm hello-world:latest