Estou tentando executar o docker dentro do Ubuntu 22.04.3 LTS rodando em WSL-2 em minha máquina Windows 10.
Eu segui as instruções aqui . Mas ainda não está funcionando, estou recebendo o seguinte erro quando executo sudo dockerd
:
failed to register "bridge" driver: failed to create NAT chain DOCKER:
iptables failed: iptables -t nat -N DOCKER:
iptables v1.8.7 (legacy): can't initialize iptables table `nat':
Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
(exit status 3)
Quando faço isso, modprobe ip_tables
recebo:
modprobe: FATAL: Module ip_tables not found in directory /lib/modules/4.4.0-22621-Microsoft
Isso se deve a um bug no Docker. Existem duas versões de iptables: a legada (no
iptables-legacy
pacote) e o wrapper em torno dos nftables mais recentes (noiptables-nft
pacote). nftables é um sistema muito melhor e mais robusto e, portanto, é o padrão nas distros mais recentes.No entanto, o Docker não funciona corretamente com nftables . No entanto, conforme descrito nesta postagem do blog , é possível mudar para o
iptables-legacy
pacote. Você pode instalar esse pacote e executar osudo update-alternatives --config iptables
, escolhendo a opção legado em vez da opção nft e, em seguida, reiniciar o daemon do docker.Observe também que, por padrão, o WSL 2 vem com todos os módulos do kernel integrados e não há módulos carregáveis dinamicamente, portanto,
modprobe
não é possível fazer nada. Parte da razão pela qual isso acontece é porque distros individuais criam e enviam as imagens de distribuição, não a Microsoft, mas o kernel é somente da Microsoft. Seria impraticável enviar módulos de kernel carregáveis, uma vez que exigiria que as distros atualizassem suas imagens com a imagem do kernel da Microsoft (o que representaria problemas logísticos e políticos), portanto a Microsoft não o faz.Eu segui este post , que diz para iniciar
ubuntu.exe
como administrador e isso resolverá o problema.O que isso faz é reinstalar uma distro e
iptables
trabalhar lá. Ainda não funcionou na primeira distro que instalei anteriormente. Mas funciona bem nesta distribuição recém-instalada, então considerei que estava consertado.