[[Edit]]Docker 10/20 přidal podporu pro cgroups v2 a Firewalld, takže tento článek je zastaralý. Informace o instalaci Dockeru na Fedoře najdete v oficiální dokumentaci.
Fedora 31 byla první hlavní distribucí Linuxu, která přešla na cgroup v2. Docker však nepodporuje cgroup v2, takže nebude fungovat na nejnovější verzi Fedory. Tento článek vysvětluje vaše možnosti a jak nainstalovat Docker na Fedoru 31, pokud se vám nelíbí alternativy. [[Edit] Toto bylo původně pro Fedoru 31, ale vše v tomto článku platí i pro Fedoru 32; Pro Fedoru 32 neexistuje žádné úložiště Docker CE, ale místo něj používáme úložiště Fedora 31.
Řídicí skupina (Control group) je funkce linuxového jádra, která organizuje procesy hierarchicky a distribuuje systémové prostředky řízeným a konfigurovatelným způsobem podél hierarchie . Group Leader v2 se poprvé objevil v linuxovém jádře 4.5 a na rozdíl od v1 má pouze jedinou hierarchii procesů a rozlišuje mezi procesy, nikoli vlákny . Doporučuji přečíst si tento příspěvek o Fedoře 31 a kontrolní skupině v2.
Docker přestal fungovat od doby, kdy Fedora 31 (a Fedora 32) přešla na cgroups v2. Tato chyba se například vyskytuje v mém systému Fedora 31, když se pokouším spustit kontejner pomocí Docker:
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.
Na Fedoře 32 se mi místo toho zobrazuje tato chyba:
docker: Error response from daemon: cgroups: cgroup mountpoint does not exist: unknown.
Co teď můžete dělat, když Fedora 32 a 31 používají cgroups v2 a Docker přestal fungovat? Níže je uvedeno několik možností včetně řešení pro instalaci Docker CE. Jako obvykle byly všechny pokyny před zveřejněním na Linux Uprising testovány.
Možnost č. 1:Použijte Podman místo Dockeru na Fedoře 32 nebo 31
Nástroj pro správu podů (podman) je kontejnerový engine kompatibilní s cgroup v2 podporovaný RedHat, který implementuje téměř všechny příkazy rozhraní Docker CLI a ke spouštění kontejnerů a podů nevyžaduje démona. Toto je Fedora doporučená možnost.
Podman je ve výchozím nastavení nainstalován na Fedoře 32 a 31, takže pro jeho použití nemusíte nic dělat. Stačí spustit podman
Místo docker
, například:
podman run --rm hello-world:latest
Možnost č. 2:Přepněte na cgroup v1, nainstalujte a používejte Moby Engine nebo Docker CE na Fedoře 32 nebo 31
Přepnout na Control Group v1.
Kromě použití Podmana (možnost #1) máte možnost upgradovat svůj systém Fedora 32 nebo 31 na cgroup v1 předáním parametru jádra systemd.unified_cgroup_hierarchy=0
.
To lze provést (trvale) pomocí příkazového řádku následovně:
sudo dnf install grubby
sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=0"
Poté restartujte systém a nyní budete mít možnost použít jeden ze dvou moby-engine
(zahrnuje Docker CLI a Docker Engine) nebo Docker CE.
Pokud budete chtít později tuto změnu vrátit zpět, předejte parametr jádra systemd.unified_cgroup_hierarchy
bez argumentu nebo s true
jako argument. Tím se znovu aktivuje používání jednotné hierarchie Cgroup (Cgroup v2), např. B.:
sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy"
Namísto Dockeru použijte moby-engine.
Docker byl odstraněn z Fedory 32 a 31 a je nahrazen moby-engine
(Oba však zatím nepodporují cgroups v2). Pokud neznáte Moby a její vztah s Dockerem, doporučuji přečíst si tento příspěvek.
Chcete-li nainstalovat moby-engine
(zahrnuje Docker CLI a Docker Engine) na Fedoře 32 nebo 31, aktivujte a spusťte jeho démona, použijte:
sudo dnf install moby-engine
sudo systemctl enable --now docker
Můžete také chtít, aby váš uživatel docker
Seskupte je, abyste je nemuseli spouštět s oprávněními superuživatele:
sudo usermod -aG docker $(whoami)
Poté musíte restartovat systém, abyste jej mohli používat moby-engine
bez práv superuživatele (např. sudo
).
Nyní můžete použít moby-engine
jako Docker, např.:
docker run --rm hello-world:latest
Mohlo by se vám také líbit:LazyDocker:Nové uživatelské rozhraní Docker a Docker Compose Terminal
Ukažte mi, jak nainstalovat Docker CE na Fedoru 32 nebo 31.
Líbí se mi moby-engine
, Docker Engine Community nepodporuje cgroup v2, takže než budete pokračovat, přepněte na cgroup v1, jak je popsáno výše.
Pokud chcete nainstalovat Docker CE, odeberte moby-engine
pokud jste jej dříve nainstalovali:
sudo dnf remove moby-engine
Nyní můžete přidat úložiště Docker CE Fedora:
- Pro Fedoru 31:
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
- Pro Fedoru 32 (pro Fedoru 32 neexistuje žádné úložiště Docker CE, takže používáme úložiště Fedory 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
Nyní můžete nainstalovat Docker CE na Fedoru 32 i 31 (tato verze bude také nainstalována docker-ce-cli
a containerd.io
), aktivujte a spusťte jeho démona:
sudo dnf install docker-ce
sudo systemctl enable --now docker
Můžete také chtít, aby váš uživatel docker
skupinu, takže nemusíte spouštět Docker s oprávněními superuživatele:
sudo usermod -aG docker $(whoami)
Poté musíte restartovat systém, abyste mohli používat Docker bez práv superuživatele (např. sudo
).
Další krok pro Fedora 32:Oprava sítě v kontejnerech Docker use (zde – zde je zmíněno, že ping na jakýkoli cíl z kontejneru Docker funguje pod Fedora 32, ale připojení TCP / UDP nefungují, ale ping nefungoval ani mně):
firewall-cmd --permanent --zone=trusted --add-interface=docker0
firewall-cmd --reload
Další zdroje (kromě těch, které již byly uvedeny v článku):
- 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/ (německy)