[Editado]: Docker 20.10 adicionou suporte para cgroups v2 e firewalld, portanto, este artigo está obsoleto. Para saber como instalar o Docker no Fedora, consulte a documentação oficial. O Fedora 31 mudou para cgroup v2, sendo a primeira grande distribuição Linux a fazer isso. No entanto, o Docker não oferece suporte ao cgroup v2, portanto, ele não funciona na versão mais recente do Fedora. Este artigo explica suas opções e como instalar o Docker no Fedora 31 se você não gostar das alternativas. Originalmente, era para o Fedora 31, mas tudo neste artigo também se aplica ao Fedora 32; não há repositório Docker CE para Fedora 32, mas usaremos o repositório Fedora 31.
cgroup (grupo de controle) é um recurso do kernel Linux que organiza os processos hierarquicamente e distribui os recursos do sistema ao longo da hierarquia de maneira controlada e configurável. cgroup v2 apareceu pela primeira vez no kernel Linux 4.5 e, ao contrário da v1, possui apenas uma única hierarquia de processo e discrimina processos, não threads. Eu recomendo ler este artigo no Fedora 31 e no grupo de controle v2.
Desde que o Fedora 31 (e o Fedora 32) mudou para cgroups v2, o Docker não funciona mais. Por exemplo, este erro aparece em meu sistema Fedora 31 ao tentar executar um contêiner usando o 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.
No Fedora 32, recebo este erro:
docker: Error response from daemon: cgroups: cgroup mountpoint does not exist: unknown.
Então, o que você pode fazer agora que o Fedora 32 e 31 usam cgroups v2 e o Docker não funciona mais? Você encontrará algumas opções abaixo, incluindo uma solução alternativa para instalar o Docker CE. Como de costume, todas as instruções foram testadas antes de postá-las no LinuxAvante.
Ferramenta Pod Manager (podman) é um mecanismo de contêiner compatível com cgroup v2 apoiado pela RedHat que implementa quase todos os comandos Docker CLI e não requer um daemon para executar contêineres e pods. Esta é a opção recomendada pelo Fedora.
O Podman é instalado por padrão no Fedora 32 e 31, então não há nada que você precise fazer para usá-lo. Basta executar podman
em vez de docker
, por exemplo:
podman run --rm hello-world:latest
Além de usar o Podman (opção #1), você tem a opção de mudar seu sistema Fedora 32 ou 31 para cgroup v1, passando o parâmetro de kernel systemd.unified_cgroup_hierarchy=0
.
Isso pode ser feito (permanentemente) a partir da linha de comando da seguinte maneira:
sudo dnf install grubby
sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=0"
Depois disso, reinicie o sistema e agora você terá a opção de usar moby-engine
(inclui Docker CLI e o Docker Engine) ou Docker CE.
Caso queira desfazer esta alteração posteriormente, passe o parâmetro do kernel systemd.unified_cgroup_hierarchy
sem argumento ou com true
como argumento. Isso reativa o uso da hierarquia unificada do cgroup (cgroup v2), por exemplo:
sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy"
O Docker foi removido do Fedora 32 e 31, sendo substituído pelo moby-engine
(ambos ainda não suportam cgroups v2). Caso você não esteja familiarizado com o Moby e sua relação com o Docker, recomendo a leitura deste artigo.
Para instalar moby-engine
(inclui Docker CLI e o Docker Engine) no Fedora 32 ou 31, habilite e inicie seu daemon, use:
sudo dnf install moby-engine
sudo systemctl enable --now docker
Você também pode adicionar seu usuário ao grupo docker
para não ter que executá-lo com privilégios de superusuário:
sudo usermod -aG docker $(whoami)
Depois disso, você precisará reiniciar seu sistema para usar moby-engine
sem privilégios de superusuário (por exemplo, sudo
).
Agora você pode usar moby-engine
como Docker, por exemplo:
docker run --rm hello-world:latest
Você também pode gostar de: LazyDocker: nova IU do Docker e Docker Compose Terminal
Como moby-engine
, Docker Engine - Community não suporta cgroup v2, então mude para cgroup v1 conforme explicado acima antes de prosseguir.
Se você deseja instalar, use Docker CE, remova moby-engine
caso você tenha instalado anteriormente:
sudo dnf remove moby-engine
Agora você pode adicionar o repositório Docker CE Fedora:
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
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
Agora você pode instalar o Docker CE no Fedora 32 e no 31 (isso também instalará docker-ce-cli
e containerd.io
), habilite e inicie seu daemon:
sudo dnf install docker-ce
sudo systemctl enable --now docker
Você também pode querer adicionar seu usuário ao grupo docker
para que não precise executar o Docker com privilégios de superusuário:
sudo usermod -aG docker $(whoami)
Depois disso, você precisará reiniciar o sistema para usar o Docker sem privilégios de superusuário (por exemplo, sudo
).
Etapa extra para Fedora 32: consertar rede dentro de contêineres Docker (daqui - isso menciona que no Fedora 32, executar ping em qualquer destino funciona de dentro de um contêiner Docker, mas as conexões tcp/udp não funcionaram, mas para mim o ping não funcionou antes disso):
firewall-cmd --permanent --zone=trusted --add-interface=docker0
firewall-cmd --reload
Fontes extras (além das já vinculadas no artigo):
Esse post foi traduzido do site LinuxUprising.com pela rtland.team.
Confira a versão original desse post em inglês:
How To Install Docker On Fedora 32 Or 31 (And Alternatives)