[[Edit]]Docker 10/20 a ajouté la prise en charge de cgroups v2 et Firewalld, cet article est donc obsolète. Pour plus d'informations sur l'installation de Docker sur Fedora, consultez la documentation officielle.
Fedora 31 a été la première grande distribution Linux à passer à cgroup v2. Cependant, Docker ne prend pas en charge le cgroup v2, il ne fonctionnera donc pas sur la dernière version de Fedora. Cet article explique vos options et comment installer Docker sur Fedora 31 si vous n'aimez pas les alternatives. [[Edit] C'était à l'origine pour Fedora 31, mais tout dans cet article s'applique également à Fedora 32; Il n'y a pas de référentiel Docker CE pour Fedora 32, mais nous utilisons le référentiel Fedora 31 à la place.
Le groupe de contrôle (groupe de contrôle) est une fonctionnalité du noyau Linux qui organise les processus de manière hiérarchique et distribue les ressources système de manière contrôlée et configurable le long de la hiérarchie . Group Leader v2 est apparu pour la première fois dans le noyau Linux 4.5 et contrairement à la v1 il n'a qu'une seule hiérarchie de processus et fait la distinction entre les processus, pas les threads . Je recommande de lire cet article sur Fedora 31 et le groupe de contrôle v2.
Docker a cessé de fonctionner depuis que Fedora 31 (et Fedora 32) est passée à cgroups v2. Par exemple, cette erreur se produit sur mon système Fedora 31 lorsque j'essaie d'exécuter un conteneur avec 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.
Sur Fedora 32, j'obtiens cette erreur à la place :
docker: Error response from daemon: cgroups: cgroup mountpoint does not exist: unknown.
Maintenant, que pouvez-vous faire maintenant que Fedora 32 et 31 utilisent cgroups v2 et que Docker a cessé de fonctionner ? Vous trouverez ci-dessous quelques options, y compris une solution de contournement pour l'installation de Docker CE. Comme d'habitude, toutes les instructions ont été testées avant d'être publiées sur Linux Uprising.
Option 1 : utiliser Podman au lieu de Docker sur Fedora 32 ou 31
L'outil de gestion de pod (podman) est un moteur de conteneur compatible cgroup v2 pris en charge par RedHat qui implémente presque toutes les commandes Docker CLI et ne nécessite pas de démon pour exécuter des conteneurs et des pods. C'est l'option recommandée par Fedora.
Podman est installé par défaut sur Fedora 32 et 31, vous n'avez donc rien à faire pour l'utiliser. Exécutez simplement podman
Au lieu de docker
, par exemple :
podman run --rm hello-world:latest
Option n° 2 :Passer à cgroup v1, installer et utiliser Moby Engine ou Docker CE sur Fedora 32 ou 31
Passez au groupe de contrôle v1.
En plus d'utiliser Podman (option n°1), vous avez la possibilité de mettre à niveau votre système Fedora 32 ou 31 vers cgroup v1 en passant le paramètre noyau systemd.unified_cgroup_hierarchy=0
.
Cela peut être fait (en permanence) via la ligne de commande comme suit :
sudo dnf install grubby
sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=0"
Après cela, redémarrez votre système et vous aurez maintenant la possibilité d'utiliser l'un des deux moby-engine
(inclut Docker CLI et Docker Engine) ou Docker CE.
Si vous souhaitez ultérieurement annuler cette modification, passez le paramètre de noyau systemd.unified_cgroup_hierarchy
sans argument ou avec true
comme argument. Cela réactive l'utilisation de la hiérarchie Cgroup uniforme (Cgroup v2), par ex. B. :
sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy"
Utilisez moby-engine au lieu de Docker.
Docker a été supprimé de Fedora 32 et 31 et est remplacé par moby-engine
(Cependant, les deux ne prennent pas encore en charge les cgroups v2). Si vous n'êtes pas familier avec Moby et sa relation avec Docker, je vous recommande de lire cet article.
Pour installer moby-engine
(inclut Docker CLI et le Docker Engine) sur Fedora 32 ou 31, activez et démarrez son démon, utilisez :
sudo dnf install moby-engine
sudo systemctl enable --now docker
Vous pouvez également souhaiter que votre utilisateur docker
Regroupez-les pour ne pas avoir à les exécuter avec des privilèges de superutilisateur :
sudo usermod -aG docker $(whoami)
Après cela, vous devez redémarrer votre système afin de l'utiliser moby-engine
sans droits de superutilisateur (par exemple sudo
).
Vous pouvez maintenant utiliser moby-engine
comme Docker, par exemple :
docker run --rm hello-world:latest
Vous pourriez également aimer :LazyDocker :nouvelle interface utilisateur Docker et Docker Compose Terminal
Montrez-moi simplement comment installer Docker CE sur Fedora 32 ou 31.
Aimer moby-engine
, Docker Engine Community ne prend pas en charge le cgroup v2, alors passez au cgroup v1 comme décrit ci-dessus avant de continuer.
Si vous souhaitez installer Docker CE, supprimez moby-engine
si vous l'avez déjà installé :
sudo dnf remove moby-engine
Vous pouvez maintenant ajouter le référentiel Docker CE Fedora :
- Pour Fedora 31 :
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
- Pour Fedora 32 (il n'y a pas de référentiel Docker CE pour Fedora 32, nous utilisons donc le référentiel 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
Vous pouvez maintenant installer Docker CE sur Fedora 32 et 31 (cela sera également installé docker-ce-cli
et containerd.io
), activez et démarrez son démon :
sudo dnf install docker-ce
sudo systemctl enable --now docker
Vous pouvez également souhaiter que votre utilisateur docker
groupe afin que vous n'ayez pas à exécuter Docker avec des privilèges de superutilisateur :
sudo usermod -aG docker $(whoami)
Après cela, vous devez redémarrer votre système afin d'utiliser Docker sans droits de superutilisateur (par exemple, sudo
).
Étape supplémentaire pour Fedora 32 :Réparer le réseau dans les conteneurs Docker use (à partir d'ici - cela mentionne que le ping sur n'importe quelle cible à partir d'un conteneur Docker fonctionne sous Fedora 32, mais les connexions TCP / UDP ne fonctionnent pas, mais le ping n'a pas fonctionné pour moi non plus):
firewall-cmd --permanent --zone=trusted --add-interface=docker0
firewall-cmd --reload
Sources supplémentaires (en plus de celles déjà liées dans l'article) :
- 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/ (allemand)