O Docker-Compose não pode se conectar ao Docker Daemon

114

Estou recebendo uma mensagem de erro dizendo que não consigo me conectar ao daemon do docker. Eu pesquisei as respostas de outras pessoas que tiveram problemas semelhantes, mas não ajudou. Estou executando a versão do Ubuntu 15.10. Vou tentar fornecer todas as informações que tenho.

root@# docker-compose -f docker-compose-deps.yml up -d
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

Versão Docker

root@# sudo docker     version
Client:
Version:      1.9.1
API version:  1.21
Go version:   go1.4.2
Git commit:   a34a1d5
Built:        Fri Nov 20 13:20:08 UTC 2015
OS/Arch:      linux/amd64
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Versão Docker-Compose

root@# docker-compose --version
docker-compose version 1.5.2, build 7240ff3

Isso é o que acontece se eu tentar interromper ou iniciar o serviço ...

root@# sudo service docker stop
stop: Unknown instance: 
root@# sudo service   docker start
docker start/running, process 5375

Se eu correr ps aux | grep docker

root@# ps aux | grep docker
root      4233  0.0  0.0  13692  2204 pts/15   S+   10:27   0:00 grep --color=auto docker

Qualquer ajuda seria muito apreciada. Deixe-me saber se precisar de mais informações.

Daveskylark
fonte
1
Por favor, não vandalize suas postagens. Depois de postar uma pergunta, você licenciou o conteúdo para a comunidade Stack Overflow em geral (sob a licença CC-by-SA). Se você quiser desassociar esta postagem de sua conta, consulte Qual é o caminho adequado para uma solicitação de desassociação? .
Bugs de

Respostas:

266

Eu tive o mesmo erro, após 15 minutos de depuração. Acontece que tudo que ele precisa é de um sudo:) Confira [Criar um grupo Docker] aqui https://docs.docker.com/engine/installation/linux/ubuntulinux/ para se livrar do prefixo sudo.

Mahmoud Zalt
fonte
35
Eles precisam de um erro melhor = / Esta questão tem 13.000 visualizações
Jonathan
4
cara, você economizou cerca de 30 horas apenas para aqueles que votaram e provavelmente foi apenas 1% do tempo que você economizou de fato
vak
5
a verdadeira correção é criar o grupo docker, enquanto o sudoé apenas uma solução alternativa / hack, na minha opinião. como a parte de criação do grupo não é explicada aqui, apenas um link é fornecido, e o conteúdo desse link alterado, considero isso uma resposta apenas de link e agora é essencialmente inútil (para a parte de correção real). você poderia adicionar a descrição de como adicionar esse grupo?
hoijui
2
Eu acho que sudoé uma má ideia também. Consulte os documentos do Docker para gerenciar o Docker como um usuário não root: docs.docker.com/engine/installation/linux/linux-postinstall/…
jwhitlock
6
Basicamente, tudo que você precisa fazer é sudo usermod -aG docker $USER, e funcionará depois.
user2340939
65

Tive esse problema e não queria bagunçar as coisas usando sudo. Ao investigar, tentei obter algumas informações:

docker info

Surpreendentemente, tive o seguinte erro:

Obteve permissão negada ao tentar se conectar ao socket daemon Docker em unix: ///var/run/docker.sock: Obtenha http: ///var/run/docker.sock/v1.38/info : disque unix / var /run/docker.sock: conectar: ​​permissão negada

Por algum motivo, eu não tinha privilégios suficientes, o seguinte comando resolveu meu problema:

sudo chown $USER /var/run/docker.sock

Et voilà!

madjaoue
fonte
Que tal reiniciar o docker novamente? Temos que fazer esse chown de novo?
Light.G
Não, ele deve funcionar quando você reiniciar o docker. Mas não tenho certeza do que acontece se você reiniciar sua máquina.
madjaoue
Por padrão, o Docker se manteria docker.sockcom um grupo não raiz, dockercomo padrão. Mas poderíamos mudar isso por -Gsinalizador durante a inicialização do daemon do Docker. No meu caso, adiciono um grupo para $USERNAME, significa adicionar o grupo docker e, em seguida, reinicializar minha máquina (ubuntu 16.04, PC). Isso funciona bem. E isso é recomendado nos documentos do docker.
Light.G
3
Funciona para mim também :)
Kamil J.
27

Parece que seu problema foi criado por um bug antigo do Docker, em que o arquivo de soquete não foi recriado após o Docker travar. Se este for o problema, renomear o arquivo de soquete deve permitir que ele seja recriado:

$ sudo service docker stop
$ sudo mv /var/lib/docker /var/lib/docker.bak
$ sudo service docker start

Uma vez que esse bug foi corrigido, a maioria das pessoas que recebem o erro Couldn't connect to Docker daemonprovavelmente o estão obtendo porque não estão no dockergrupo e não têm permissão para ler o arquivo. Executar com sudo docker ...irá consertar isso, mas não é uma ótima solução.

O Docker pode ser executado como um usuário não root (sem sudo) que possui as permissões de grupo adequadas. A documentação pós-instalação do Linux contém os detalhes. A versão curta:

$ sudo groupadd docker
$ sudo usermod -aG docker $USER
# Log out and log back in again to apply the groups
$ groups  # docker should be in the list of groups for your user
$ docker run hello-world  # Works without sudo

Isso permite que os usuários no dockergrupo executem dockere docker-composecomandos sem sudo. O próprio Docker executa uma raiz, permitindo alguns ataques, então você ainda precisa ter cuidado com os contêineres que executa. Consulte a documentação do Docker Security para obter mais detalhes.

jwhitlock
fonte
Esta questão é específica para a instalação do Linux e a correção envolve mudanças no sistema host Linux para corrigi-la. Você obterá melhores informações se postar uma pergunta semelhante com os mesmos detalhes, mas para o Windows. Para se resolver, recomendo uma leitura atenta da documentação do Docker para Windows
jwhitlock
10

Eu tive o mesmo problema. Depois de fazer anotações e analisar alguns resultados de depuração, finalmente resolvi o que pode ser o mesmo erro. Comece o serviço primeiro,

service docker start

Não se esqueça de incluir seu usuário no grupo docker.

RA
fonte
Eu estava executando como root quando encontrei este erro. Parecia que sudoconsertou para os outros -_- Fico feliz em descobrir que foi realmente isso, que eu esqueci de fazer. Tão simples!
Será em
8

Você deve adicionar seu usuário ao grupo "docker" com algo como:

sudo usermod -aG docker $ {USER}

Zhiiker
fonte
5

Recebi este erro quando havia arquivos no Dockerfilediretório que não eram acessíveis ao usuário atual. dockerportanto, não foi possível fazer upload do contexto completo para o daemon e trouxe a mensagem " Não foi possível conectar ao daemon Docker em http + docker: // localunixsocket ".

Cweiske
fonte
2
Obrigado! Isso resolveu para mim. Fácil de verificar, já que todos os comandos do docker funcionaram, mas docker-compose não. Docker-compose também funcionou em outro diretório. Mensagem de erro muito enganosa, BTW.
Csongor Fagyal
1
Isso realmente deveria ser mais alto
Arlen Anderson
1
Obrigado! trabalhou para mim. O uso docker build .resultará em problemas de permissão.
everyman de
A única coisa que funcionou - por que as mensagens de erro do Docker são tão ruins? Obrigado!
coderMe
4

Uma maneira de resolver isso seria primeiro adicionar seu usuário ao dockergrupo executando o seguinte

sudo usermod -aG docker $USER

IMPORTANTE: Lembre-se de sair do sistema (não apenas do terminal) e voltar para que isso tenha efeito!

Arunavkonwar
fonte
sudo usermod -aG docker $ {USER} Devemos também sair e fazer login para aplicar as alterações: su - $ {USER}
user3785966
3

Pela saída de "ps aux | grep docker", parece que o docker daemon não está sendo executado. Tente usar os métodos abaixo para ver o que está errado e por que o docker não está iniciando

  1. Verifique os registros do docker

$ sudo tail -f /var/log/upstart/docker.log

  1. Tente iniciar o docker no modo de depuração

$ sudo docker -d -D

Manish R
fonte
2

No meu caso, seu serviço docker pode ser interrompido

Comando para iniciar o serviço docker:

$ sudo systemctl start docker

Comando para verificar se ele inicia:

$ sudo docker run hello-world

John_J
fonte
2

Outra razão pela qual esse erro pode aparecer: para mim, era uma definição de caminho de imagem malformada em docker-compose.yml:

  service:
    image: ${CONTAINER_REGISTRY_BASE}/my-service
   ...

Lookis ok'ish primeiro, mas eu tinha CONTAINER_REGISTRY_BASE=eu.gcr.io/my-project/definido no env. Aparentemente, o //caminho no caminho da imagem causou esse erro.

docker-compose: v.1.21.2
docker: 18.03.1-ce
Leberknecht
fonte
2

apenas experimente sudo. Parece um problema de permissão!

sudo docker-compose -f docker-compose-deps.yml up -d

funcionou para mim.

Desmobilizador
fonte
1

Usei o Ubuntu 16.04 e também encontrei esse problema quando usei docker-compose. Eu consertei executando este comando.

$ sudo systemctl start docker
$ sudo docker-compose build
Khachornchit Songsaen
fonte
1

Existe uma pequena possibilidade de você ter excluído a máquina padrão? Mas, primeiro verifique se todos os arquivos estão lá (OSX, semelhante em outros sistemas)

brew install docker docker-compose docker-machine xhyve docker-machine-driver-xhyve
brew link docker docker-compose docker-machine xhyve docker-machine-driver-xhyve

sudo chown root:wheel /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
sudo chmod u+s /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve

Além disso, instale o aplicativo Docker, pois é muito mais fácil manter os contêineres:

brew cask reinstall docker

ans iniciar o aplicativo Docker a partir do localizador (espere até que o serviço seja totalmente iniciado)

Em seguida, verifique a instalação com:

docker-machine ls

se nenhuma máquina estiver presente na lista, crie uma e inicie-a:

docker-machine create default
docker-machine start default

Depois disso, build, compose e todos os outros comandos devem funcionar corretamente.

rapttor
fonte
1

no meu caso é porque a permissão ubuntu,

  1. Item da lista

verifique a permissão por

docker info 

se eles imprimirem permissão para problemas, insira a descrição da imagem aqui use

sudo chmod -R 777 /var/run/docker.sock
joe-khoa
fonte
0

Para mim, a correção foi instalar uma versão mais recente (1.24) de docker-composeusar este artigo .

A versão anterior (1.17) foi instalada a partir ubuntudo repositório padrão de, mas após instalar uma versão mais recente, consegui iniciar o contêiner. Espero que ajude alguém.

Artyom Ilyin
fonte
0

Acho que é por direito de acesso, você só tem que escrever

sudo docker-compose-deps.yml up
Moustapha Berrou
fonte
-1

No meu caso tenho o mesmo erro quando tento docker-compose build e minha solução foi apenas adicionarsudo

sudo docker-compose build
Andrey Suglobov
fonte
-2

Eu encontrei isso e pareceu resolver o meu problema.

GitHub Fix Docker Daemon Crash

Alterei o conteúdo do meu arquivo docker-compose-deps.yml conforme visto no link. Então eu corri docker-compose -f docker-compose-deps.yml up -d. Então mudei de volta e funcionou por algum motivo. Não precisei continuar as etapas no link que forneci, mas as duas primeiras etapas corrigiram o problema para mim.

Daveskylark
fonte
2
ubuntu 16.04: basta adicionar sudo: sudo docker-compose up -d
Moccine
Não é o suficiente como resposta. Se quiser aceitar sua própria resposta, você deve apontar a verdadeira razão de seu problema. Caso contrário, seria um verdadeiro engano para os outros. BTW, existem outras respostas aqui, elas ajudaram? Pois eu não vi nenhum comentário seu.
Light.G