O Docker não pode se conectar ao daemon do docker


473

Depois de atualizar minha versão do Docker 0.8.0, recebo uma mensagem de erro ao digitar sudo docker version:

Client version: 0.8.0
Go version (client): go1.2
Git commit (client): cc3a8c8
2014/02/19 12:54:16 Can't connect to docker daemon. Is 'docker -d' running on this host?

E eu segui as instruções e digitei o comando sudo docker -de obtive o seguinte:

[/var/lib/docker|2462000b] +job initserver()
[/var/lib/docker|2462000b.initserver()] Creating server
open /var/lib/docker/aufs/layers/cf2414da53f9bcfaa48bc3d58360d7f1cfd3784e4fe51fbef95197709dfc285d: no such file or directory[/var/lib/docker|2462000b] -job initserver() = ERR (1)
2014/02/19 12:55:57 initserver: open /var/lib/docker/aufs/layers/cf2414da53f9bcfaa48bc3d58360d7f1cfd3784e4fe51fbef95197709dfc285d: no such file or directory

Como resolvo o problema?


7
Você usou o sudo ao executar o docker -d?
Ben Whaley

Percebo que no erro diz no such file or directory[/var/lib/docker|2462000b]. Existe /var/lib/dockerno seu sistema? Caso contrário, acho que você precisará reinstalar o Docker.
Ben Whaley

3
Eu tenho o mesmo problema (não consigo conectar-me a um daemon que o 'ps' mostra ainda está em execução), exceto que não recebo nenhuma mensagem 'arquivo não encontrado' ao iniciar o daemon. / var / lib / docker existe.
Jonathan Hartley

Você está usando a janela de encaixe em um VPS?
precisa

Instale o docker desktop a partir daqui, ele resolverá. docs.docker.com/docker-for-mac/install
Guy Assaf

Respostas:


642

Linux

As etapas pós-instalação da documentação do Linux revelam as seguintes etapas:

  1. Crie o grupo de janela de encaixe .
    sudo groupadd docker
  2. Adicione o usuário ao grupo de janelas de encaixe .
    sudo usermod -aG docker $ (whoami)
  3. Faça logoff e logon novamente para garantir que o docker seja executado com as permissões corretas.
  4. Inicie a janela de encaixe.
    início da janela de encaixe do serviço sudo

Mac OS X

Como diz Dayel Ostraco , é necessário adicionar variáveis ​​de ambiente:

docker-machine start # Start virtual machine for docker
docker-machine env  # It's helps to get environment variables
eval "$(docker-machine env default)" # Set environment variables

O docker-machine startcomando gera os comentários para orientar o processo.


Sim. Este foi o problema para mim. Adicionei meu usuário ao grupo de janelas de encaixe e agora posso me conectar ao daemon. Obrigado
Bogdan

FWIW, o link para a seção específica é esta
assimétrica

20
Se, por algum motivo, você não quiser fazer logout, use o newgrpcomando para iniciar um novo shell neste novo grupo. Como esta: newgrp docker.
Denilson Sá Maia

sudo chown $ USUÁRIO: $ USER / path / to / janela de encaixe / binário
Ivor Scott

Não tive tempo de reiniciar o bash. O mesmo alias docker='sudo docker'aconteceu com o truque. : p
LovaBill 2/16

150

Linux

Para executar o daemon do docker no Linux (da CLI ), execute:

$ sudo service docker start # Ubuntu/Debian

Nota: Pule o $caractere ao copiar e colar.

No RedHat / CentOS, execute: sudo systemctl start docker.

Para inicializar o sistema de arquivos "base", execute:

$ sudo service docker stop
$ sudo rm -rf /var/lib/docker
$ sudo service docker start

ou manualmente como:

$ sudo docker -d --storage-opt dm.basesize=20G

Instale docker-machineno Linux

Para instalar os binários da máquina no Linux:

  • localmente:

    install -vm755 <(curl -L https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) $HOME/bin/docker-machine
    
  • global:

    sudo bash -c 'install -vm755 <(curl -L https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) /usr/local/bin/docker-machine'
    

Mac OS

No macOS, o dockerbinário é apenas um cliente e você não pode usá-lo para executar o daemon do docker, porque o daemon do Docker usa recursos específicos do kernel do Linux; portanto, você não pode executar o Docker nativamente no OS X. Portanto, é necessário instalar docker-machinepara criar VM e anexar a ele.

Instale docker-machineno macOS

Se você ainda não possui um docker-machinecomando, instale-o usando um dos seguintes métodos:

  • Usando Brew comando: brew install docker-machine docker.
  • manualmente no GitHub :

    install -v <(curl https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) /usr/local/bin/docker-machine
    

Consulte: Introdução ao Docker para Mac .

Configurar docker-machineno macOS

Para iniciar o Docker Machine via Homebrew, execute:

brew services start docker-machine

Para criar uma defaultmáquina (se você não tiver uma, consulte docker-machine ls:):

docker-machine create --driver virtualbox default

Em seguida, configure o ambiente para o cliente Docker:

eval "$(docker-machine env default)"

Em seguida, verifique novamente listando os contêineres:

docker ps

Consulte: Introdução ao Docker Machine e uma VM local .


Instale o Docker.app no macOS

Como alternativa à solução acima, você pode instalar um aplicativo Docker:

brew cask install docker

Verifique esta postagem para mais detalhes . Consulte também: Não é possível conectar-se ao daemon do Docker no macOS


1
O sudo service docker start funciona com o Docker 1.9.1 no Ubuntu 14.04

obrigado. Foi isso que funcionou para mim no Ubuntu 14.04. tudo o resto falhou.
nyxee

Esta é a única coisa que funcionou para mim no Mac OSX com hardware mais antigo que 2010. Eu tive que instalar docker-toolboxa partir docs.docker.com/toolbox/toolbox_install_mac
Vikram

2
Eu precisava instalar o docker-compose, o docker-machine e o docker via Homebrew, então funcionou bem!
Entalpi

Eu tive esse problema no CentOS 7.6 com o docker 18 sudo rm -rf /var/lib/dockere, em seguida, reiniciar fez o truque. Eu estava realmente preso e nenhuma outra solução funcionou para mim.
Ashkan

142

Se você estiver executando o Docker no OS X, a execução da seguinte avaliação funcionou para mim.

eval "$(docker-machine env default)"

Se você preferir não precisar executar esta declaração de avaliação em todas as sessões do terminal, adicione-a ao seu bash_profile:

#Docker
eval "$(docker-machine env default)"

Certifique-se de reiniciar a sessão do terminal ou de executar a origem bash_profilepara que as alterações tenham efeito.


3
O mesmo aqui, se eu tentar fazer isso sozinho, geralmente fico Error checking TLS connection: Host is not running... executando essa avaliação depois que o comando docker-machine start defaultfez o truque.
Emilio Ferrucci

100

Após uma investigação detalhada, esse problema parece ocorrer sempre que o Mac OS X é reiniciado (ou a máquina virtual do Docker é reiniciada), o que impede que o cliente do Docker se conecte ao daemon do Docker.

Para resolver o problema, você pode:

A) Reinstale o Docker Toolbox usando o instalador oficial ( https://www.docker.com/products/docker-toolbox ) ou simplesmente

B) Execute os seguintes comandos em ordem:

# First make sure that the virtual machine is running
docker-machine start default

# Regenerate TLS connection certs, requires confirmation
docker-machine regenerate-certs default

# Finally, set env
eval "$(docker-machine env default)"

C) O mesmo que (B), você também pode copiar e colar a seguinte linha para executar todos os três comandos:

docker-machine start default; docker-machine regenerate-certs default; eval "$(docker-machine env default)"

Caso você receba o seguinte erro:

Error getting SSH command: Something went wrong running an SSH command!
command : cat /etc/os-release
err     : exit status 255
output  :

basta executar novamente os três comandos outra vez e deve funcionar na segunda vez.


6
Estou recebendo Host não existe: "padrão"
Roman Gaufman 17/02

@RomanGaufman: isso funciona para você: docker-machine start default?
KAD

1
@RomanGaufman Eu tive que reiniciar meu terminal antes que o comando fosse executado com sucesso.
anon58192932

é isso porque o ip da caixa virtual vm muda toda vez que você reinicia o seu mac?
Cui Pengfei #

@ Erro de RomanGaufman é resolvido pela resposta (atualmente) a seguir: stackoverflow.com/a/34887761/634576
Dave Schweisguth

47

Isso geralmente acontece quando você não está no dockergrupo. Você pode se adicionar ao dockergrupo com:

sudo usermod -aG docker yourusername

ou

sudo usermod -aG docker $(whoami)

Depois disso, você precisa fazer logout e logon novamente no servidor.

Como alternativa, você pode sudotodos os comandos do Docker.


5
e se o grupo não existir: sudo groupadd docker
izy 13/01/17

30

Se todas as outras soluções acima não funcionarem, tente verificar a propriedade de /var/run/docker.sock:

ls -l /var/run/docker.sock

Se você não é o proprietário, altere a propriedade com o comando:

sudo chown *your-username* /var/run/docker.sock

Em seguida, você pode prosseguir e tentar executar os comandos do Docker sem problemas: D


1
Eu comecei com esta resposta, e isso me ajudou!
Andrzej Martyna

2
Problema com esta abordagem é que, você tem que repetir este passo cada vez que o daemon for reiniciado
MFIhsan

Olá, @MFIhsan, um administrador de sistema inteligente diria para você simplesmente criar um script bash desses comandos e adicioná-lo ao crontab para que ele seja executado na reinicialização / inicialização, conforme explicado aqui> stackoverflow.com/a/29247942/3469960
kevthanewversi

Um usuário comum nunca deve possuir uma meia! Se você não possui a meia, verifique se está no grupo de rodas e no grupo ao qual a meia pertence ... não no grupo de proprietários de meias!
CrazyMerlin

16

A melhor maneira de descobrir por que o Docker não está funcionando será executar o daemon manualmente.

$ sudo service docker stop
$ ps aux | grep docker  # do this until you don't see /usr/bin/docker -d
$ /usr/bin/docker -d

O daemon do Docker faz logon no STDOUT, para que ele comece a cuspir o que estiver fazendo.

Aqui estava o meu problema:

[8bf47e42.initserver()] Creating pidfile
2015/01/11 15:20:33 pid file found, ensure docker is not running or delete /var/run/docker.pid

Isso ocorreu porque a instância foi clonada de outra máquina virtual. Eu apenas tive que remover o pidfile e tudo funcionou depois.

É claro que, em vez de assumir cegamente que isso funcionará, sugiro executar o daemon manualmente mais uma vez e revisar a saída do log quanto a outros erros antes de iniciar o backup do serviço.


1
Foi também isso que me ajudou a encontrar o problema (infelizmente, eu vi sua resposta depois). O meu era o apparmorpacote que faltava .
Pierre de LESPINAY

Esta solução funcionou para mim. Depois de excluir /var/run/docker.pid, finalmente consegui iniciar a janela de encaixe.
jirikadlec2

3
Aviso: '-d' está obsoleto, será removido em breve. Veja o uso. WARN [0000], por favor use 'docker daemon'.
Juanmf #

3
sinalizador fornecido mas não definido: -d
Luís de Sousa

Para executar o daemon do docker manualmente nas versões mais recentes com o recurso de depuração ativado:dockerd -D
Luis Miguel Serrano

14

Se você receber a mensagem Can't connect to docker daemon. Is 'docker -d' running on this host? , poderá verificá-ladocker version .

Se você vir as informações como vir Docker Client em execução. mas o Docker Server não é , obviamente é necessário iniciar o servidor do Docker.

No CentOS, você pode usar servicepara iniciar ou parar o servidor Docker.

$ sudo service docker stop
$ sudo service docker start

Depois de digitar docker version, você obterá as informações do Docker Client e do Docker Server e o daemon do Docker foi iniciado.


2
sudo service docker starttambém funcionou para mim no Ubuntu 14.04.
funroll

Cent os 7, tenho que fazer isso toda vez que inicio o docker.
Paddy

@Paddy Você precisa habilitar o serviço após declará-lo, e ele será executado se o sistema for iniciado e permanecer em execução em segundo plano.
CrazyMerlin

Todas essas respostas que dizem: "Você precisa sudo systemctl start docker" sempre assumem que há um serviço docker para iniciar. Se houvesse qualquer problema instalando janela de encaixe, um arquivo de configuração do serviço não pode mesmo existir, caso em que YOU'DE obter: "Unidade docker.service não carregado"
CrazyMerlin

12

Faça ps aux | grep dockerpara ver se o daemon está em execução. Se não for executado/etc/init.d/docker start


5
Eu tenho o mesmo problema. 'ps' mostra que meu processo do docker ainda está em execução.
Jonathan Hartley

parar e iniciar o docker (que já estava em execução) me endireitou.
Kd #

14
sudo service docker startme diz "docker start / running, process 4633" então sudo service docker statusdiz "docker stop / waiting"
Pierre de LESPINAY

12

Eu reinicio o Docker depois de instalá-lo:

$ sudo service docker stop
$ sudo service docker start

E isso funciona.


9

Eu tenho um problema semelhante. Eu tive que sair e fazer login novamente no shell, porque acabei de instalar o Docker e o comando a seguir não apareceu no meu ambiente.

export DOCKER_HOST=127.0.0.1:4243 >> ~/.bashrc

3
Eu só precisava sair e entrar novamente. Tudo consertado!
Mark Shust em M.academy

Isso resolveu meu problema! Estou executando o Ubuntu 16.04 como WSL. A única coisa que eu tive que mudar foi o número de porta padrão: export DOCKER_HOST = 127.0.0.1: 2375 >> ~ / .bashrc
Alex

9

Eu enfrentei esse problema e reiniciei o Docker usando estes comandos:

$ sudo service docker stop
$ sudo service docker start

Mas não resolvi meu problema, porque esqueci de executar meus comandos do Docker sem sudo. Para quem enfrenta esse problema, tente verificar isso.

Tentar

$ sudo docker info

em vez disso:

$ docker info

Este foi exatamente o meu problema ao tentar executar docker buildno Ubuntu Xenial.
Ashnazg #

9

Você pode usar o comando

sudo service docker stop && sudo service docker start

simplesmente iniciá-lo.


3
Ou sudo service docker restarté mais fácil fr
fr1sk 24/01

8

Eu tenho o mesmo erro e tentando docker-machine regenerate-certsoueval.. não funcionou para mim.

Isso no OS X 10.11.3 (El Capitan) e no Docker v1.10.1. Consegui corrigi-lo apenas excluindo e recriando a docker-machine novamente. Fonte

Se estiver em execução docker-machine ls, mostra uma saída semelhante à abaixo;

DOCKER

Desconhecido

ERROS

Não foi possível consultar a versão do docker: Não é possível conectar-se ao terminal do mecanismo do docker

Tente remover sua máquina Docker com;

docker-machine rm -f default

Onde defaultestá o nome da sua máquina Docker. Então;

docker-machine create -d virtualbox default

Cria uma nova máquina Docker.

Verifique novamente se tudo parece normal agora (sem erros ou Docker desconhecido) com:

docker-machine ls

Finalmente, não se esqueça de executar "$(docker-machine env default)"antes de continuar ou executar o Docker Quickstart Terminal, que faz isso por você ...


6

Eu tive o mesmo problema - "Não é possível conectar-se ao daemon do docker". (exceto que não recebi nenhum erro de 'arquivo não encontrado' ao tentar iniciar o servidor.)

'ps' mostrou que "/ usr / bin / docker -d" ainda estava em execução

Percebi que nunca havia conseguido executar o servidor sozinho. Toda tentativa havia produzido

...
2014/03/24 21:57:29 pid file found, ensure docker is not running or delete /var/run/docker.pid

Por isso, percebi, tardiamente, que a instalação do docker talvez tivesse registrado o daemon no inicio, que o iniciou para mim. Portanto, tentar matar o daemon para reiniciá-lo manualmente falha (operação não permitida). Então eu fiz um

sudo kill -9 <PID>

no processo daemon. Outro daemon imediatamente tomou seu lugar, e esse novo agora permite que meu cliente CLI se conecte:

$ sudo docker info
Containers: 0
Images: 0
Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 0
WARNING: No memory limit support
WARNING: No swap limit support

6

Tente adicionar o usuário atual ao dockergrupo:

sudo usermod -aG docker $USER

Então saia e entre.


6

Use o aplicativo Docker CE

Mac OS

Use o novo aplicativo Docker Community Edition para macOS. Por exemplo:

  1. Desinstale todos os pacotes do Docker Homebrew que você instalou até o momento:

    brew uninstall docker-compose
    brew uninstall docker-machine
    brew uninstall docker
    
  2. Instale um aplicativo manualmente ou via Homebrew-Cask :

    brew cask install docker
    

    Nota: Este aplicativo irá criar ligações necessárias para docker, docker-compose, docker-machine, etc.

  3. Após executar o aplicativo, faça check-out do ícone de uma baleia Docker no menu de status.

  4. Agora você deve ser capaz de usar docker, docker-compose, docker-machinecomandos, como de costume no Terminal .

Relacionado:

Linux / Windows

Faça o download do Docker CE na página de download e siga as instruções.


Nota de 2018-5-20: o aplicativo Docker CE no macOS é muito ruim. toda vez que a abro, congela do jeito que está, não pode fazer nada. Eu tentei Google e corrigir o problema, até agora ainda trabalhando nisso
NamNamNam

1
Esta é a resposta correta para o problema relatado, obrigado!
paranza 13/01

6

Eu sabia que já existem muitas respostas neste post. Gostaria apenas de adicionar uma resposta simples que resolva o problema acima mencionado.

sudo systemctl start docker

Execute o comando acima e ele iniciará todos os serviços / threads relacionados ao docker.


5

Acabei de ter o mesmo problema, executando no Amazon AWS .

Aqui está o que eu tentei:

  • Configurar docker-machinelocalmente com a instância da AWS já existente
  • Configuração genérica usada
  • É meio que conectado, mas desde que a porta remota foi fechada, ela falhou
  • Depois disso, o daemon Docker se recusou a iniciar, mas a execução dockerdfuncionou ...

Foi testado a seguir na máquina remota:

service docker start # Also restart, no success
systemctl start docker # Also restart, no success
dockerd # Success

Eu removi /var/lib/dockere desinstalei tudo, mas não houve sucesso após a reinstalação. Infelizmente não tenho logs armazenados de falhas, mas docker.serviceapenas me recusei a iniciar.

No entanto, o que finalmente resolveu meu problema foi basicamente:

sudo usermod -aG docker $(whoami)

4

Seguindo o site DOC do Docker: Gerenciar o Docker como um usuário não raiz

1) Criar grupo Docker

sudo groupadd docker 

2) Faça o usuário pertencer ao grupo de janelas de encaixe para obter os privilégios do grupo.

sudo usermod -aG docker $USER

Verifique se a variável de ambiente DOCKER_HOST está definida para seu shell.

env | grep DOCKER_HOST

Se existir,

unset DOCKER_HOST

Então isso deve funcionar:

docker run hello-world

1
você é um salva-vidas unset DOCKER_HOSTtrabalhou para mim
user3014595

4

Se você estiver executando o OS X usando a ferramenta Docker, siga isto.

Reinicie o daemon e configure seu ambiente:

docker-machine restart

E depois

docker-machine env

Finalmente,

eval $(docker-machine env)

Para testar o daemon está em execução:

docker ps -aou docker-machine ls. Isso listará todos os contêineres.


2

Eu tenho o mesmo problema. No CentOS 6.5:

ps aux |grep `cat /var/run/docker.pid`

Se ele não mostrar nenhum processo de daemon do Docker, digite:

docker -d

Então Ctrl+ Dpara parar o Docker. Como usamos a -dopção, o Docker será executado como daemon. Agora podemos fazer:

service docker start

Então eu posso fazer a docker pull centos. Isso é tudo.

NOTA: Se estes não funcionarem, você pode tentar yum updatee repeti-los novamente, porque eu yum installantes deles.


2

O Serviço Docker pode não estar em execução.

Se você estiver em um RedHat / Fedora / CentOS, tente o seguinte:

sudo systemctl start docker

Se você estiver no Ubuntu / Debian:

sudo service start docker

O Docker começará a ser executado no host e na respectiva porta.


1

Verifique se você está usando o Docker Machine :)

Executar docker-machine env defaultdeve fazer o truque.

Porque de acordo com a documentação:

O Docker Machine é uma ferramenta que permite instalar o Docker Engine em hosts virtuais e gerenciar os hosts com docker-machinecomandos. Você pode usar o Machine para criar hosts Docker na caixa local Mac ou Windows, na rede da empresa, no data center ou em provedores de nuvem como AWS ou Digital Ocean.

Usando docker-machinecomandos, você pode iniciar, inspecionar, parar e reiniciar um host gerenciado, atualizar o cliente e o daemon do Docker e configurar um cliente do Docker para conversar com seu host.

Aponte a CLI da máquina para um host gerenciado em execução e você pode executar dockercomandos diretamente nesse host. Por exemplo, correr docker-machine env defaultpara apontar para um host chamado default, siga as instruções na tela para completar a envinstalação e funcionamento docker ps, docker run hello-worlde assim por diante.

https://docs.docker.com/machine/overview/


1
  1. Eu também tive o mesmo problema. O problema estava nos soquetes alocados ao docker-daemon e docker-client.
  2. Primeiro, a permissão não foi definida para o docker-client no docker.sock. Você pode defini-la usando "sudo usermod -aG docker $ USER"
  3. Em seguida, verifique seu arquivo bash onde o docker-client está sendo executado, para mim estava em 0.0.0.0:2375, enquanto o docker-daemon estava em execução no soquete unix (foi definido no arquivo de configuração do dockerd).
  4. Apenas comente a linha de base e funcionará bem.
  5. Mas se você quiser fazê-lo funcionar na porta TCP em vez do soquete unix, altere o arquivo de configuração do dockerd e defina-o em 0.0.0.0.2375 e mantenha a linha no bash como está presente ou defina-a como 0.0.0.0: 2375

1

Para corrigir, você precisa emitir os seguintes comandos no terminal. Vou explicar cada passo:

# Uninstall Docker from apt packages
$ sudo apt-get remove docker docker.io

# Remove it from the libraries just to be
# sure it's gone forever
$ sudo rm -rf /var/lib/docker/*

Agora, se você deseja simplificar as coisas e obter mais tempo, pode executar meu initscript com o parâmetro installDocker:

# Pull the init script from GitHub
$ wget https://github.com/dminca/dotfiles/blob/master/init

# Add rights to run the script
$ chmod 755 init

# Just run the script with the installDocker parameter
$ ./init installDocker

Uma reinicialização é opcional, mas sugiro que você faça isso para garantir que tudo corra bem.


1

Eu tive o mesmo problema ao executar o Docker 1.10 no Ubuntu 14.04 e nenhuma das respostas fornecidas funcionou. Para mim, a correção foi especificar o driver de armazenamento ao executar o daemon do Docker.

sudo docker daemon --storage-driver=devicemapper

1

Se você usa o gitlab-ci / gitlab-runners, obtém esse erro se não tiver permissões para acessar /var/run/docker.sock.

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

Para resolver o problema:

sudo usermod -aG docker gitlab-runner

Verifique com:

sudo -u gitlab-runner -H docker info

Espero que ajude.


0

Se a regeneração de certificados TLS não funcionar

docker-machine regenerate-certs default

Tente reiniciar a máquina docker e defina a variável env:

docker-machine restart default
eval $(docker-machine env default)

Verifique se a máquina está funcionando com:

docker-machine ls

ou alternativamente

docker run hello-world

Isso funcionou para mim. No entanto, se você ainda não tiver o daemon instalado, a página de solução de problemas do Docker detalha um processo para parar, remover e criar uma nova máquina.


0

Também recebi o problema "Não é possível conectar ao daemon do Docker. O daemon do Docker está sendo executado neste host?".

Eu tinha esquecido de usar sudo. Espero que ajude alguns de nós.

$:docker images
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

$:sudo docker images
REPOSITORY   TAG   IMAGE ID   CREATED   SIZE
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.