[ad_1]
O Docker é uma das principais plataformas para construção e execução de contêineres de software. Ele vem com tudo o que você precisa para usar contêineres em um único host ou em vários nós distribuídos no modo Swarm.
O Docker tem uma arquitetura baseada em daemon. O software responsável por criar e iniciar containers é independente do processo CLI que aceita seus comandos. Isso significa que você verá erros na CLI se tentar executar comandos sem uma conexão de daemon ativa. Neste artigo, compartilharemos alguns métodos para corrigir essas mensagens frustrantes.
Sintomas do problema
A CLI do Docker depende da disponibilidade de uma conexão de daemon. Ele interage com o daemon usando chamadas de API. Quando o daemon configurado estiver inacessível, docker
comandos como docker ps
, docker run
S docker build
exibirá uma mensagem de erro semelhante a esta:
$ docker run hello-world:latest Cannot connect to the Docker daemon at unix:///var/run/docker.sock Is the docker daemon running?
Isso revela que a CLI tentou se comunicar com o daemon do Docker usando o /var/run/docker.sock
Soquete Unix. O plugue não está aberto, então a conexão falhou.
1. Verifique se o serviço Docker Daemon está em execução
O daemon do Docker normalmente é gerenciado por um serviço systemd que inicia o Docker automaticamente após a reinicialização do host. Você pode iniciar a solução de problemas verificando se este serviço está em execução:
$ sudo systemctl status docker docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: inactive (dead)
O serviço deve informar Active: active (running)
se o daemon estiver em execução. O exemplo acima mostra inactive (dead)
o que significa que o daemon parou.
Inicie o Docker com o seguinte comando:
$ sudo systemctl start docker
Agora você deve ser capaz de executar docker
Comandos CLI bem-sucedidos.
O Docker pode permanecer no estado parado após a reinicialização da máquina. Você pode resolver isso habilitando o serviço, permitindo que o systemd o inicie automaticamente:
$ sudo systemctl enable docker $ sudo systemctl daemon-reload
a daemon-reload
O comando diz ao systemd para recarregar sua configuração para aplicar a mudança.
2. Inicie o daemon manualmente
Às vezes, você pode estar usando um sistema que não possui o serviço Docker instalado. Você pode iniciar manualmente o daemon do Docker usando o dockerd
domínio. Normalmente, isso deve ser executado como root
.
$ sudo dockerd INFO[2022-06-29T15:12:49.303428726+01:00] Starting up
O Docker permanecerá acessível enquanto o comando estiver em execução. Use Ctrl + C para parar o daemon.
3. Verifique se o CLI está apontando para o daemon correto
Podem ocorrer problemas quando a CLI tenta se conectar a uma instância remota do daemon do Docker. Esta é geralmente a causa quando a mensagem de erro mostra um endereço TCP:
$ docker run hello-world:latest Cannot connect to the Docker daemon at tcp:///0.0.0.0:2375
Neste exemplo, o docker
A CLI está tentando entrar em contato com o daemon do Docker em 0.0.0.0:2375
usando TCP, em vez do soquete Unix Docker local. Isso falhará se o suporte a TCP do daemon do Docker estiver desabilitado ou se o host especificado não estiver acessível na rede.
Geralmente, você pode resolver isso alternando para o contexto correto da CLI do Docker para a conexão do daemon que deseja usar:
$ docker context use default
Você pode listar todos os contextos disponíveis e os endpoints do daemon aos quais eles se conectam com o context ls
domínio:
$ docker context ls NAME DESCRIPTION DOCKER ENDPOINT default * Current DOCKER_HOST based configuration unix:///var/run/docker.sock
O contexto atualmente selecionado é destacado com um asterisco.
Valores inesperados no DOCKER ENDPOINT
coluna vertebral são geralmente causadas pela DOCKER_HOST
variável de ambiente definida. Você verá um aviso quando este for o caso:
$ export DOCKER_HOST=1.2.3.4 $ docker context ls NAME DESCRIPTION DOCKER ENDPOINT default * Current DOCKER_HOST based configuration tcp://1.2.3.4:2375 Warning: DOCKER_HOST environment variable overrides the active context. To use a context, either set the global --context flag, or unset DOCKER_HOST environment variable.
a presença do DOCKER_HOST
A variável de ambiente em seu shell substitui o endpoint definido pelo contexto selecionado. Neste exemplo, docker
comandos sempre apontarão para a instância do daemon em tcp://1.2.3.4:2375
.
Este problema pode ser resolvido excluindo o DOCKER_HOST
variável:
$ export DOCKER_HOST=
O Docker agora usará o endpoint configurado pelo seu contexto ativo. Este será o soquete Unix local padrão no /var/run/docker.sock
a menos que você tenha configurado manualmente um contexto personalizado.
$ docker context ls NAME DESCRIPTION DOCKER ENDPOINT default * Current DOCKER_HOST based configuration unix:///var/run/docker.sock
4. Problemas de permissão
Permissões de usuário incorretas no soquete do Docker são outra causa comum de problemas de conexão do daemon. Esse tipo de problema geralmente exibe uma mensagem de erro ligeiramente diferente:
$ docker run hello-world:latest Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
Isso acontece quando sua conta de usuário Unix não tem permissão para interagir com o soquete que expõe a API do Docker. Adicione-se a docker
group é a maneira mais prática de resolver esse problema:
$ sudo usermod -aG docker $USER
Você precisará abrir uma nova janela de shell ou sair e entrar novamente para que essa alteração tenha efeito. Agora você deve ser capaz de executar docker
comandos sem problemas de permissão.
Resumo
“Não é possível conectar ao daemon do Docker” aparece quando a CLI do Docker não pode se comunicar com uma instância do daemon do Docker usando sua configuração atual. Isso geralmente ocorre porque o serviço do daemon do Docker foi interrompido ou desabilitado. Você também pode estar tentando se conectar a um host remoto do Docker que ficou offline.
Agora você deve conhecer as possíveis causas desse problema e as formas comuns de resolvê-lo. Corrija o erro verificando a configuração do daemon do Docker, reiniciando o serviço do Docker e garantindo que sua conta de usuário tenha permissão para interagir com o soquete do Docker.
[ad_2]