如何安装 Docker Fedora 32 或 31(和替代品)

[ad_1]

[[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

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

切换到 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 引擎)或 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 (包括 Docker CLI 和 Docker 引擎) Fedora 32 或 31,启用并启动它的守护进程,使用:

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 终端 UI

只需向我展示如何在其上安装 Docker CE Fedora 32 或 31。

喜欢 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(没有 Docker CE 存储库用于 Fedora 32,所以我们将使用 Fedora 31 回购):
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

现在您可以在两者上安装 Docker CE Fedora 32 和 31(这也将安装 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:修复 Docker 容器内的网络 使用(从这里开始 – 这提到了 Fedora 32,从 Docker 容器内部 ping 任何目标都可以工作,但是 tcp/udp 连接不起作用,但对我来说,在此之前 ping 也不起作用):

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

firewall-cmd --reload

额外的来源(除了文章中已经链接的来源):

  • https://fedoraproject.org/wiki/Common_F31_bugs#Other_software_issues
  • https://docs.docker.com/install/linux/docker-ce/fedora/
  • https://kofler.info/docker-unter-centos-8-und-fedora-31-installieren/(德语)

[ad_2]

Related Posts