Para usar pi-hole em um contêiner no Ubuntu 22.04.3 LTS, primeiro baixei
docker pull pihole/pihole
então eu libero algumas portas
sudo systemctl disable systemd-resolved.service && sudo systemctl stop systemd-resolved.service
então, para executá-lo,
docker run -d --name pihole-cont -it -p 53:53/tcp -p 53:53/udp -p 67:67/udp -p 80:80 -p 443:443 -v "${DOCKER_CONFIGS}/dnsmasq.d/:/etc/dnsmasq.d/" -e ServerIP=[my IP address] --restart=unless-stopped --cap-add=NET_ADMIN --dns=127.0.0.1 --dns=1.1.1.1 pihole/pihole:latest"
Quando abro um navegador e digito
http://[docker's IP address]/admin
Chego à página de login do pi-hole, mesmo não sabendo a senha (presumo que seja normal), mas a conexão fica inutilizável. Torna-se impossível navegar na internet, os sites começam a carregar mas demora uma eternidade, o vídeo não começa antes de pelo menos cinco minutos, o limite da minha paciência. Também instalei com sucesso o pi-hole em uma máquina virtual com os mesmos resultados. Achei que o problema poderia ser um loop sem fim: meu computador faz uma solicitação, passa pelo servidor DNS, o servidor DNS é virtualizado no meu pc, então faz uma solicitação para o meu pc e assim por diante, mesmo que eles tinham IPs diferentes. Isto é semelhante, IPs diferentes, internet inutilizável.
Meu palpite está correto ou errado? Estou fazendo algo errado? É mesmo possível conteinerizar um buraco para que a Internet seja realmente acessível?
Agradeço antecipadamente
EDIT: Então, remover --dns=127.0.0.1
faz o aviso
WARNING: Localhost DNS setting (--dns=127.0.0.1) may fail in containers
vá embora. No entanto, simplesmente desabilitar systemd-resolved.service
quebra minha internet de qualquer maneira. Se docker stop [pi-hole ID]
a internet continuar quebrada, mesmo que eu habilite systemd-resolved.service
novamente. Este último emite um aviso de conflito de porta. Para recuperar minha conexão com a Internet, limpo todas as imagens e contêineres com
docker system prune -a -f --volumes
(muito drástico, mas rápido), reinicie systemd-resolved.service
e posso finalmente editar esta questão.
Então o problema parece ser que eu desativo systemd-resolved.service
, que tem um conflito de porta com o contêiner. Como faço para corrigir isso?
Obrigado novamente
É mais fácil de usar
docker-compose
Docker-compose permite manter todos os parâmetros em um arquivo e executar o contêiner como um usuário normal (não como
root
, não precisasudo
).Certifique-se de que o docker-compose esteja instalado:
Crie uma pasta onde irá o arquivo de configuração:
Observe
$USER
que será substituído pelo seu nome de usuário.Em seguida, crie o
docker-compose.yml
arquivo:Com o conteúdo do arquivo:
Certifique-se de alterar o fuso horário e a senha no texto acima para atender às suas necessidades. A linha
hostname: pi-hole
acima determina o que você vê no portal Pihole. Se você tiver duas ou mais instâncias de imagens do docker Piholes em computadores diferentes, faz sentido nomeá-las de forma diferente nos respectivosdocker-compose.yml
arquivos.Salve e saia do editor com Ctrl+ Sseguido de Ctrl+ X.
Desative e pare o serviço resolvido pelo systemd. Você parece já ter feito isso. Estou guardando isso para outros:
Desvincular e editar
resolv.conf
:Quando o arquivo abrir no editor nano, certifique-se de que a seguinte linha esteja comentada com um
#
na frente:Salve e saia do editor com Ctrl+ Sseguido de Ctrl+ X.
Teste se o DNS está funcionando antes de iniciar o Pi-hole:
Se funcionar, inicie o pi-hole com o seguinte comando:
Isso iniciará o start docker como um daemon (a
-d
opção) e pegará a configuração do contêiner quedocker-compose.yml
você criou acima.Se tudo correr bem, você poderá abrir o portal Pihole acessando:
no seu navegador favorito, como o Firefox. Então você pode definir os servidores DNS que Pihole usa em suas configurações
Espero que isto ajude