Não é possível conectar ao docker a partir do docker-compose


163

Instalei o docker-machine 0.1.0 e o docker-compose 1.1.0 no Mac OS 10.8.5.
O Docker-machine está funcionando normalmente e pode se conectar pelo docker-machine ssh.

$ docker-machine ls
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM
dev    *        virtualbox   Running   tcp://192.168.99.100:2376   

No entanto, não é possível conectar-se do docker-compondo.

$ docker-compose up

Não foi possível conectar-se ao daemon do Docker em http + unix: //var/run/docker.sock - está em execução?

Se estiver em um local não padrão, especifique o URL com a variável de ambiente DOCKER_HOST.

Meu Dockerfile e docker-compose.yml estão aqui.

Dockerfile

FROM centos:centos7
DOCKER_HOST tcp://192.168.99.100:2376

docker-compose.yml

web:
  build: .

Por que não consigo conectar? Alguma ideia?


49
Será docker-machineexecutado como root? Eu vim aqui com o mesmo problema no Ubuntu e foram as permissões no soquete - sudofizeram o truque.
SLD

7
Para aqueles no Linux, talvez você precise ser adicionado ao grupo de janelas de encaixe .
Batandwa

5
apenas execute: sudo docker-compor up
Girish Gupta

Eu tive o mesmo problema. Você precisa reiniciar a janela de encaixe. sudo service docker restartou sudo service docker starteu resolvi isso com isso.
OM Bharatiya

Para aqueles que usam o Ubuntu, você deve usar o sudo e não deve adicionar usuários ao grupo de janelas de encaixe . Veja os comentários na resposta aceita: askubuntu.com/questions/477551/…
kas

Respostas:


89

A máquina do Docker está em execução. Mas você precisa exportar algum ambiente para se conectar à máquina Docker. Por padrão, o dockercliente CLI está tentando se comunicar com o daemon usando http+unix://var/run/docker.sock(como mostrado na mensagem de erro).

Exporte as variáveis ​​de ambiente corretas usando eval $(docker-machine env dev)e tente novamente. Você também pode simplesmente executar docker-machine env devpara ver as variáveis ​​de ambiente que serão exportadas. Observe que um deles é DOCKER_HOST, assim como a mensagem de erro sugere que você pode precisar definir.


2
Você pode colocar esse comando ( eval "$(docker-machine env default)") na sua lixeira / pós-atividade para garantir que esteja sempre atualizado.
Dannid

1
Onde encontro o arquivo bin / postactivate?
Lukas Schulze

Ou você esqueceu de instalar a janela de encaixe: $ eval $(docker-machine env dev) Command 'docker-machine' not found, but can be installed with: sudo snap install docker
R OMS

224

Solução simples para mim: sudo docker-compose up


ATUALIZAÇÃO 14/03/2016: Em algum momento do processo de instalação do docker (ou docker-compose?), Há uma sugestão e um exemplo para adicionar seu nome de usuário ao grupo "docker". Isso permite evitar a necessidade de "sudo" antes de todos os comandos do docker, da seguinte maneira:

~ > docker run -it ubuntu /bin/bash
root@665d1ea76b8d:/# date
Mon Mar 14 23:43:36 UTC 2016
root@665d1ea76b8d:/# exit
exit
~ > 

Observe atentamente a saída dos comandos de instalação (docker e a segunda instalação para docker-compose) e você encontrará a etapa necessária. Também está documentado aqui: https://subosito.com/posts/docker-tips/

Sudo? Não!

Cansado de digitar sudo docker toda vez que você emite um comando? Sim, existe uma maneira de lidar com isso. Embora naturalmente o docker exija um usuário root, podemos fornecer um grupo equivalente a root para operações do docker.

Você pode criar um grupo chamado janela de encaixe e adicionar o usuário desejado a esse grupo. Após reiniciar o serviço do docker, o usuário não precisará digitar sudo toda vez que realizar operações do docker. Como se parece em comandos de shell? como raiz, aqui está:

> sudo groupadd docker
> sudo gpasswd -a username docker
> sudo service docker restart 

Feito!

UPDATE 2017-3-9

As instruções de instalação do Docker foram atualizadas aqui.

Etapas de pós-instalação para Linux

Esta seção contém procedimentos opcionais para configurar hosts Linux para funcionar melhor com o Docker.

Gerenciar o Docker como um usuário não raiz

O daemon do docker se liga a um soquete Unix em vez de uma porta TCP. Por padrão, o soquete Unix pertence à raiz do usuário e outros usuários podem acessá-lo apenas usando o sudo. O daemon do docker sempre é executado como usuário root.

Se você não quiser usar o sudo ao usar o comando docker, crie um grupo Unix chamado docker e adicione usuários a ele. Quando o daemon do docker é iniciado, torna a propriedade do soquete Unix lida / gravável pelo grupo do docker.

Para criar o grupo de janelas de encaixe e adicionar seu usuário:

# 1. Create the docker group.
$ sudo groupadd docker

# 2. Add your user to the docker group.
$ sudo usermod -aG docker $USER

# 3. Log out and log back in so that your group membership is re-evaluated.

# 4. Verify that you can run docker commands without sudo.
$ docker run hello-world

Este comando baixa uma imagem de teste e a executa em um contêiner. Quando o contêiner é executado, ele imprime uma mensagem informativa e sai.


1
Da mesma forma, por algum motivo sudo é a única maneira de fazê-lo funcionar: O: O: O
Jamie Hutber

12
Em vez de sair ... você pode usar o comando:newgrp docker
Thiago Falcao

Ahh resposta detalhada com subquestão :-)
Sukumaar

1
Re: "Solução simples para mim: sudo docker-compose up". Quando tento isso, recebo:sudo: docker-compose: command not found
mblakesley

37

Se você iniciou o docker usando sudo, execute o docker-compose com sudo Like:sudo docker-compose up


Funcionou para mim quando corri em sudo docker-compose buildvez de docker-compose build.
anms_pro 04/06

26

Por padrão, o daemon do docker sempre é executado como usuário raiz; portanto, você precisa anexar sudoseus comandos do Docker.

Se você não quiser usar o sudo ao usar o comando docker, crie um grupo Unix chamado docker e adicione usuários a ele. Quando o daemon do docker é iniciado, torna a propriedade do soquete Unix lida / gravável pelo grupo do docker.

Para criar o grupo de janelas de encaixe e adicionar seu usuário:

  1. Crie o grupo de janela de encaixe.

    $ sudo groupadd docker

  2. Adicione seu usuário ao grupo de janelas de encaixe.

    $ sudo usermod -aG docker $USER

  3. Efetue logout e logon novamente, para que sua participação no grupo seja reavaliada.

  4. Verifique se você pode encaixar comandos do docker sem o sudo.

    $ docker run hello-world

Este comando baixa uma imagem de teste e a executa em um contêiner. Quando o contêiner é executado, ele imprime uma mensagem informativa e sai.

As etapas descritas acima vêm da documentação oficial do Docker .


Como podemos fazer isso no Docker instalado no Windows?
Jeff Cook

Além disso, o que eu fiz para corrigir janela de encaixe-compor estava se pondo o usuário executar docker-composecomo o proprietário /usr/local/bin/docker-composee reinicie de serviço
Sam

groupa associação pode ser atualizada com su - $USERpara salvar o logoff on / off
Stuart Cardall

19

Quando você receber um erro :

ERRO: Não foi possível conectar ao daemon do Docker em http + docker: // localhost - está em execução?

A solução seria:

  1. Primeiro, tente verificar se o serviço Docker está instalado e funcionando conforme o esperado na sua máquina remota / local:sudo service docker status

    se Não executar - sudo service docker start ou sudo systemctl start docker(depende de algumas versões do Linux, consulte as instruções de inicialização do Docker ).

  2. Segundo, inicie o docker como sudo sudo docker-compose up


16

sudo systemctl start docker - para iniciar o serviço Docker.

sudo docker-compose up depois disso.

Eu tenho o Fedora 26 e, tentando resolver o mesmo problema, entrei no Docker Compose na página dos Desenvolvedores do Fedora e depois no Docker na página dos Desenvolvedores do Fedora , o que me ajudou.

Provavelmente, o serviço docker considerado pela comunidade para começar com o sistema e ser executado em segundo plano o tempo todo, mas para mim não era tão óbvio, e é por isso que consigo pensar por que não há uma resposta popular como esta.

Na página dos Desenvolvedores do Fedora, há instruções sobre como habilitar o Docker para iniciar com o sistema:

sudo systemctl enable docker


Substitua systemctlpor launchctlse você estiver executando no mac.
Rohit Swami

6

Se você estiver no Linux, talvez não tenha docker-machineinstalado, pois ele é instalado apenas por padrão em computadores Windows e Mac.

Nesse caso, você precisará acessar: https://docs.docker.com/machine/install-machine/ para encontrar instruções sobre como instalá-lo na sua versão do Linux.

Após a instalação, tente executar novamente docker-compose upantes de tentar qualquer coisa listada acima.

Espero que isso ajude alguém. Isso funcionou para minha instalação do devilbox no Fedora 25.


5

Além de adicionar usuários ao grupo de janelas de encaixe, para evitar digitar sudorepetidamente, você também pode criar um alias para dockercomandos como:

alias docker-compose="sudo docker-compose"
alias docker="sudo docker"

4

se você estiver usando a docker-machine, precisará ativar o ambiente usando a variável env . caso você não esteja usando a docker-machine, execute seus comandos com o sudo


3

Alguém verificou o log?

No meu caso, a mensagem de erro em /var/log/upstart/docker.logera:

Listening for HTTP on unix (/var/run/docker.sock) 
[graphdriver] using prior storage driver "aufs" 
Running modprobe bridge nf_nat failed with message: , error: exit status 1 
Error starting daemon: Error initializing network controller: Error creating default "bridge" network: can't find an address range for interface "docker0" 

Vale mencionar que eu tinha o vpn ativado, então: $ sudo service openvpn stop $ sudo service docker restart $ docker-compose up|start $ sudo service openvpn start era a solução.


3

A resposta de @srfrnk funciona para mim.

Na minha situação, eu tinha o próximo arquivo docker-compose.yml:

  nginx:
    build:
      context: ./
      dockerfile: "./docker/nginx.staging/Dockerfile"
    depends_on:
      - scripts
    environment:
      NGINX_SERVER_NAME: "some.host"
      NGINX_STATIC_CONTENT_OPEN_FILE_CACHE: "off"
      NGINX_ERROR_LOG_LEVEL: debug
      NGINX_BACKEND_HOST: scripts
      NGINX_SERVER_ROOT: /var/www/html
    volumes:
      - ./docker-runtime/drupal/files:/var/www/html/sites/default/files:rw
    ports:
      - 80:80

./docker-runtimeproprietário e grupo - é rootquando o proprietário de outros arquivos - meu usuário. Quando eu tentei construirnginx

Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

Eu adicionei ./docker-runtimea .dockerignoree está resolvido o meu problema.


3

durante a execução docker-compose pull- eu estava ficando abaixo do erro

ERRO: Não foi possível conectar ao daemon do Docker em http + docker: // localhost

está funcionando?

solução -

sudo service docker start 

Problema resolvido


2

Eu tive os mesmos sintomas.

Só dif que aconteceu apenas durante o docker-compose build docker pstrabalho. Aconteceu com a versão 2.x, bem como 3.x. Reiniciado dockerserviço, em seguida, a máquina ... Mesmo re-instalado docker+ docker-compose.

Tentei de tudo, mas nada ajudou.

Finalmente, tentei criar o Dockerfile "manualmente" usando docker build.

Aparentemente, tive um problema de permissão em um arquivo / pasta dentro do Dockercontexto. Ele estava tentando ler o contexto ao iniciar a compilação e falhou com uma mensagem de erro adequada. No entanto, essa mensagem de erro não se propagou para a docker-composequal mostra apenasCouldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?

Tendo constatado que a solução estava simplesmente adicionando o arquivo / pasta ao .dockerignorearquivo, pois não era necessária para a compilação. Outra solução poderia ter sido a chownou chmod-lo.

De qualquer forma, talvez isso possa ajudar alguém a encontrar o mesmo problema que realmente não tem nada a ver dockere a mensagem de erro enganosa sendo exibida.


Eu tive o mesmo problema: permissões de arquivo em um volume montado. No meu caso, eu tinha um certificado SSL de propriedade da raiz que havia sido colocado em um volume do Docker. chown/ chmodconsertei. Mensagem de erro terrível, mas eles estão trabalhando nisso. Veja github.com/docker/compose/issues/5318
bcattle

2

$ sudo docker-compor

Eu segui as etapas, como está na resposta acima, para adicionar $ USER à janela de encaixe de grupo. eu não queria adicionar uma nova janela de encaixe de grupo porque, na instalação, um grupo chamado janela de encaixe foi criado automaticamente.

O Docker CE está instalado e em execução. O grupo de janelas de encaixe é criado, mas nenhum usuário é adicionado a ele. Você precisa usar o sudo para executar os comandos do Docker. Continue na pós-instalação do Linux para permitir que usuários não privilegiados executem comandos do Docker e para outras etapas de configuração opcionais.

mas o uso do docker-compose up também não funcionou. Ele deu o mesmo erro anterior. Então, no meu caso (Ubuntu 18.10), o sudo docker-compose corrigiu o problema.

ps: @Tiw obrigado pelo conselho.


1
Talvez seja melhor colocar a solução em primeiro lugar, e aqueles que explicam abaixo. Além disso, você pode usar esses botões no editor para formatar melhor sua resposta.
Tiw

2

Eu sei que é bobagem, mas no meu caso eu apenas tentei sudoe funcionou como um encanto.

no seu caso, tente: $ sudo docker-compose up


1

tente isto:

sudo ln -s / usr / local / bin / docker-compose / usr / bin / docker-compose


1

Resolvi o problema usando as seguintes etapas

$ sudo service docker status
$ sudo service docker start
$ sudo docker-compose up

agora docker-compor está funcionando


0

Para mim, comecei a atualizar o Docker e cancelei a meio caminho. Não notei que o Docker não estava funcionando (se estiver, existe um ícone na barra de navegação superior do meu Macbook, pela bateria restante, tempo, etc.). Depois que o iniciei e terminei a atualização, docker-compose uptrabalhei novamente!


0

Minha instalação tem dois casos para esse erro:

  • __pycache__ os arquivos criados pelo usuário root após a execução dos testes de integração dentro do contêiner ficam inacessíveis para o docker (informa o problema original) e o docker-compose (informa sobre o host do docker ambiguamente);
  • microk8s bloqueou minha porta até que eu parei.


0

sair e entrar novamente me ajudou. No meu caso, foi uma instalação nova, criei um novo usuário, um novo grupo e o adicionei ao grupo de janelas de encaixe.

exit exit

então ssh no servidor novamente


0

O seguinte funcionou para mim, não tenho certeza de que parte fez o truque:

julian:project$ sudo service docker status
julian:varys$ sudo service docker status                                                                                                                                                                                
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2020-07-15 01:21:16 UTC; 24min ago
     Docs: https://docs.docker.com
 Main PID: 6762 (dockerd)
    Tasks: 25
   CGroup: /system.slice/docker.service
           └─6762 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

julian:project$ export DOCKER_HOST=unix:///run/containerd/containerd.sock

julian:project$ sudo groupadd docker
groupadd: group 'docker' already exists
julian:project$ sudo gpasswd -a $USER docker
Adding user ubuntu to group docker
julian:project$ newgrp docker

julian:project$ ls -ln /var/run/ | grep docker
drwx------  5   0   0  120 Jul 15 01:10 docker
-rw-r--r--  1   0   0    4 Jul 15 01:10 docker.pid
srw-rw----  1   0 999    0 Jul 15 01:10 docker.sock

julian:project$ sudo rm /var/run/docker.sock                                                                                                                                                                                            
julian:project$ sudo rm /var/run/docker.pid

julian:project$ sudo service docker restart  
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.