O procedimento oficial de instalação do Docker funciona muito bem em Debian e Ubuntu, porém quebra no Kali Linux. O motivo é simples: o repositório oficial do Docker não publica pacotes para o codename kali-rolling, e o lsb_release --codename --short do Kali retorna justamente este valor.
A solução é detectar o codename da distribuição e, quando ele não existir no repositório do Docker, utilizar o codename de uma versão suportada do Ubuntu (neste caso o jammy, referente ao Ubuntu 22.04).
Todos os comandos abaixo devem ser executados como root. Caso esteja utilizando um usuário comum, adicione
sudono início de cada linha.
Instalando as dependências
1
apt install apt-transport-https ca-certificates curl software-properties-common
Adicionando a chave GPG do repositório
1
2
3
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
Detectando o codename da distribuição
Este é o trecho que resolve o problema no Kali. O script abaixo verifica se o codename atual existe no repositório do Docker e, caso não exista, utiliza o jammy:
1
2
3
4
5
6
7
# Detecta o codename; se for Kali (ou outro não suportado pelo repo), usa Ubuntu 22.04 (jammy)
CODENAME=$(lsb_release --codename --short)
if [ "$CODENAME" = "kali-rolling" ] || [ "$(. /etc/os-release && echo "$ID")" = "kali" ] || \
! curl -fsSL -o /dev/null "https://download.docker.com/linux/ubuntu/dists/${CODENAME}/Release"; then
echo "[*] Codename '${CODENAME}' não suportado pelo repositório Docker — usando 'jammy' (Ubuntu 22.04)"
CODENAME=jammy
fi
Adicionando o repositório do Docker
1
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu ${CODENAME} stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
A variável
${CODENAME}só existe na mesma sessão do shell em que o bloco anterior foi executado. Caso tenha fechado o terminal, execute novamente o bloco de detecção antes deste comando.
Instalando o Docker
1
2
apt update
apt install docker-ce
Validando a instalação
Verifique se o serviço está ativo e execute o container de teste:
1
2
3
systemctl enable --now docker
systemctl status docker
docker run --rm hello-world
Utilizando o Docker sem root
Por padrão o socket do Docker pertence ao grupo docker, portanto apenas o root consegue executar os comandos. Para permitir o uso com o seu usuário comum:
1
usermod -aG docker $USER
Após executar o comando acima é necessário encerrar e iniciar novamente a sessão (logout/login) para que o novo grupo seja aplicado.
Adicionar um usuário ao grupo
dockerconcede a ele privilégios equivalentes ao root na máquina, pois é possível montar qualquer diretório do host dentro de um container.