Estou tentando conectar-me a um daemon habilitado para TLS sem TLS?


221

Estou tentando aprender sobre o Docker , mas continuo recebendo mensagens de erro enigmáticas (para mim).

Possivelmente, o exemplo mais simples disso é tentar imprimir a versão do Docker que instalei:

$ sudo docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
FATA[0000] Get http:///var/run/docker.sock/v1.16/version:
    dial unix /var/run/docker.sock: no such file or directory.
    Are you trying to connect to a TLS-enabled daemon without TLS?

Acabei de ler o guia do usuário e seguir todas as etapas exatamente, por isso estou surpreso ao receber esta mensagem ... O que devo fazer agora?

Acabei de perceber que, se eu não usar sudo, não recebo o erro:

$ docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8

Claro, isso não é uma solução, pois talvez eu precise usar em sudoalgum lugar no caminho ...

Acabei de encontrar outra página dizendo " Se você estiver usando o OS X , não deverá usar sudo". Não sei se eles significam apenas para esse exemplo ou em geral.


38
Pergunta estúpida, mas você iniciou o daemon do docker?
— precisa

Eu tenho seguido o guia do usuário, então sim, acredito que o daemon do docker foi iniciado. Como posso verificar novamente?
— Shawn

5
Na verdade, você encontrou a solução. Com o boot2docker, você nunca precisará do sudo com o linux, sempre precisará do sudo. Isso ocorre porque o boot2docker realmente executa esses comandos em uma caixa virtual configurada para acessar o daemon corretamente.
— Usman Ismail

1
Eu estava lutando com esta questão e funcionando sem sudo funcionou para mim
— sak

6
Quase todas as respostas são específicas do OS X (elas mencionam boot2docker), embora o OS X não seja mencionado explicitamente na pergunta ou nas tags. Se alguém estiver interessado em resposta genérica, consulte a minha resposta.
— Piotr Dobrogost

Respostas:


150

Para mim, a execução $(boot2docker shellinit 2> /dev/null)corrigiu o problema.

Isso executa a saída do boot2docker shellinitcomando (as três set -x ...linhas) na sua sessão de terminal atual, o que permite que o dockercomando saiba onde encontrar a máquina virtual boot2docker.

Adicionar $(boot2docker shellinit 2> /dev/null)ao final do ~/.bash_profilearquivo garantirá que o dockercomando esteja configurado toda vez que você abrir o terminal.


Para as pessoas que usam shell peixe: boot2docker shellinit ^ /dev/null | source.


Observe que 2> /dev/null(e o equivalente em peixe ^ /dev/null) são opcionais. Como o @ pablo-fernandez sugeriu, isso oculta as Writing ..linhas.


Eu já tinha feito isso, mas vou adicioná-lo ao .bash_profile, boa ideia #
— Shawn

definitivamente ajuda com boot2docker 1.5, mas mais velho boot2docker 1.2 não fazê-lo corretamente
— Max Markov

1
Eu adicionei um redirecionamento stderr de modo a "Escrita ..." declarações não aparecer: $ (boot2docker shellinit 2> / dev / null)
— Pablo Fernandez

3
Obrigado a mencionar a casca de peixe! Resolvido o problema para mim.
— precisa saber é o seguinte

1
Como mencionado na resposta de Salvador Dali abaixo, certifique-se de executar também boot2docker startantes de executar o shell init.
— 21715 Kevin

78

Eu estava recebendo o mesmo erro no MacOS com o sudo e sem ele.

Eu o resolvi com:

boot2docker start
$(boot2docker shellinit)

PS: Obrigado ao Alan. Eu descobri que essa abordagem é recomendada na documentação oficial .

PS2: Às vezes boot2docker initpode ser necessário antes de executar dois comandos (obrigado Aaron).


Isso funcionou, mas eu não entendo o porquê? o que o $ (boot2docker shellinit) está fazendo?
— Emile

Isso funcionou no Mac OS X, mas eu tenho a mesma pergunta que Emile, ou seja, por que isso funcionou?
— Nissan

Isso não funcionou para mim no Mac OSX 10.10.4 com o Docker Tools.
— b01

Eu não apenas tinha que executar o boot2docker shellinit, mas também copiar e executar cada um dos comandos exibidos. Documentação oficial pelo link diz que este comando somente exibe exigido conjunto de comandos
— Vitaliy Lebedev

Trabalhou para mim também em uma máquina Windows.
— Noushad 24/09/2015

55

No meu caso (Linux Mint 17), fiz várias coisas e não tenho certeza sobre quais delas são totalmente necessárias.

Incluí pacotes ausentes do Ubuntu:

$ sudo apt-get install apparmor lxc cgroup-lite

Um usuário foi adicionado ao grupo docker:

$ sudo usermod -aG docker ${USER}

Daemon iniciado (o openSUSE só precisa disso)

$ sudo docker -d

Obrigado \ Atribuição


Obrigado Usman Ismail , porque talvez tenha sido apenas a última coisa ...

Pergunta estúpida, mas você iniciou o daemon do docker? O que você precisa saber é o seguinte:


Agradeço também ao github @ MichaelJCole pela solução que funcionou para mim, porque não verifiquei o daemon quando li o comentário de Usman.

Comentário do GitHub :

sudo apt-get install apparmor lxc cgroup-lite
sudo apt-get  install docker.io
# If you installed docker.io first, you'll have to start it manually
sudo docker -d
sudo docker run -i -t ubuntu /bin/bash

Obrigado ao fredjean.net post por observar os pacotes ausentes e esquecer as instruções de instalação padrão do Ubuntu e o google sobre outras maneiras

Acontece que os pacotes cgroup-lite e lxc não são instalados por padrão no Linux Mint. A instalação dos dois me permitiu executar o bash na imagem base e, em seguida, criar e executar a minha imagem.


Obrigado ao comentário de brettof86 sobre openSUSE


2
Obrigado! No meu caso (Casa da Moeda 17.1), estava o aparelho que estava faltando.
— Alexandre L Telles

2
Adicionar-me ao grupo estivador fez a coisa por mim sudo adduser $USER docker,. Truque para fazê-lo em vigor no shell atual foi curgroup=$(id -gn) && newgrp docker && newgrp $curgroup, adaptado de superuser.com/questions/272061/...
— Tero Tilus

1
Eu acho que o fato de isso ter uma pontuação muito menor é porque mais pessoas estão usando o OS X do que o Linux? Estou usando o Ubuntu 14.04 e funciona para mim.
— icedwater

1
openSUSE e eu só precisava para iniciar o daemon
— blockloop

Desculpe minha ignorância sobre a docker-machine, mas não sei. Mas se você descobrir, aponte aqui nos comentários ou na edição da resposta. : D
— ElMesa

49

O problema sublinhado é simples - falta de permissão para /var/run/docker.sock soquete de domínio unix.

No capítulo da opção de soquete do Daemon da referência da Linha de Comando do Docker para o Docker 1.6.0:

Por padrão, um soquete de domínio unix (ou soquete IPC) é criado em /var/run/docker.sock, exigindo permissão root ou associação ao grupo de janelas de encaixe .

As etapas necessárias para conceder direitos aos usuários são bem descritas nas instruções de instalação do Docker para o Fedora :

Concedendo direitos aos usuários para usar o Docker

A ferramenta de linha de comando do docker entra em contato com o processo do daemon do docker por meio de um arquivo de soquete /var/run/docker.sockpertencente a root:root. Embora seja recomendável usar o sudo para comandos do docker, se os usuários desejarem evitá-lo, um administrador poderá criar um grupo do docker, possuir o seu /var/run/docker.socke adicionar usuários a esse grupo.

$ sudo groupadd docker
$ sudo chown root:docker /var/run/docker.sock
$ sudo usermod -a -G docker $USERNAME

Saia e faça login novamente para que as alterações acima entrem em vigor. Observe que os pacotes Docker de algumas distribuições Linux (Ubuntu) já estão /var/run/docker.sockno dockergrupo, tornando desnecessárias as duas primeiras etapas acima.

No caso do OS X e boot2dockera situação é diferente; o daemon do Docker é executado dentro de uma VM, portanto a DOCKER_HOSTvariável de ambiente deve ser configurada para essa VM para que o cliente do Docker possa encontrar o daemon do Docker. Isso é feito executando $(boot2docker shellinit)no shell.


1
Hmm, minha situação é semelhante, mas sutilmente diferente. Estou executando no Ubuntu 14.04. Docker aparentemente instalado corretamente (digitar apenas "docker" exibe a lista de comandos). Criei um grupo de janelas de encaixe e tornei meu usuário um membro. Este é apenas um sistema doméstico e estou apenas brincando com o docker. No entanto, qualquer coisa que não seja apenas "docker" traz o erro. Eu acredito nisso porque o docker não pode criar /var/run/docker.sock. No meu sistema / var / run existe um link simbólico para / run que é root: root e 755 perm, para que o docker não possa escrever lá. Não tenho certeza qual seria minha solução para isso.
— Steve Cohen

Piotr, essa explicação é muito útil. Você pode explicar por que "$ (boot2docker shellinit)" funciona, mas "boot2docker shellinit" simples não funciona? Eu entendo que os parênteses implicam a execução em um subshell, mas eu não tenho sido capaz de decifrar por que isso é necessário para tornar o trabalho janela de encaixe corretamente quando nenhum dos outros comandos exigem que ....
— Alex Edelstein

@AlexEdelstein A diferença entre boot2docker shellinite outros comandos é que esse comando não faz nenhuma alteração em si, mas gera apenas (imprime) comandos que você precisa executar sozinho. Você pode executar boot2docker shellinitprimeiro e, em seguida, copiar e executar manualmente cada comando a partir de sua saída. É mais fácil executar todos os comandos executando boot2docker shellinitem um subprocesso (com $()sintaxe), pois dessa forma cada linha de saída está sendo executada automaticamente como um comando shell. Consulte docs.docker.com/installation/mac/#from-your-command-line onde isso é mostrado em detalhes.
— Piotr Dobrogost

@SteveCohen Convém verificar se o serviço docker está em execução sudo service docker status. No meu Ubuntu 14.04, ele não estava executando após a instalação, o que causou o erro.
— razz0

1
Obrigado por vincular a documentação real para a causa raiz, resolvi o meu problema
— RonaldFindling

23

Verifique se o daemon do Docker está em execução:

service docker start

Isso consertou para mim!


sudo service docker startpara mim
— Milimetric

systemctl enable docker.servicee systemctl start docker.service para usuários de Linux system.d (Arch no meu caso)
— PRDeving

sudo service docker restartpara mim
— Frozen Flame

15
  1. O Docker chama a si mesmo de tempo de execução auto-suficiente para contêineres Linux. Em termos simples, atua como servidor e cliente.
  2. o $ docker version consulta de comando é interna ao executável do Docker e não ao daemon / serviço em execução.
  3. $ docker images or $ docker ps or $ docker pull centos são comandos que enviam consultas ao daemon / serviço docker em execução.
  4. Por padrão, o Docker suporta conexões TLS com seu daemon / serviço.
  5. Somente se o usuário que você efetuou login faz parte do grupo de usuários dockerou se utilizou sudoantes do comando, por exemplo $ sudo docker images, ele não requer conectividade TLS.

Visite a página de documentação do Docker Proteger o soquete do daemon do Docker .

Role um pouco até o topo e procure warning sectionpor clareza.


1
As respostas populares até agora só se aplicam ao OS X, enquanto essa é muito mais geral, explica a causa e me permitiu resolvê-la no GNU / Linux.
— 26415 Sinisterstuf #

1
@laffuste, seu comando limpará os grupos adicionais do usuário. por causa do "-a" ausente
— Pawel Barcik 20/03/2015

3
@PawelBarcik erro terrível, obrigado:sudo usermod -a -G docker {username}
— laffuste

1
Como essa resposta responde à pergunta? Qual o motivo do erro? Como corrigi-lo? (Como não estou no OS X, as respostas existentes não se aplicam).
— Piotr Dobrogost

13

Você precisará fazer:

$boot2docker init
$boot2docker start

As seguintes configurações corrigiram o problema:

$export DOCKER_HOST=tcp://192.168.59.103:2376
$export DOCKER_CERT_PATH=/Users/{profileName}/.boot2docker/certs/boot2docker-vm
$export DOCKER_TLS_VERIFY=1

1
Este comando também pode ser usado para definir as variáveis ​​de ambiente (em vez de fazê-lo manualmente):eval "$(boot2docker shellinit)"
— Executa

11

É possível que você ainda não tenha permissão para o arquivo. Aconteceu comigo depois que me adicionei ao dockergrupo usando

sudo gpasswd -a user docker

mas ainda não saiu.

Para resolver isso, você pode fazer login novamente ou usar sg docker "docker <subcommand> ..."antes de sair.

Se você estiver em grupo docker em /etc/group, você deve ser capaz de executá-lo sem senha digitação.

https://dingyichen.wordpress.com/2015/02/05/docker-dial-unix-varrundocker-sock-no-such-file-or-directory-are-you-trying-to-connect-to-a- tls-enabled-daemon-without-tls /


7

No Ubuntu após a instalação do lxc-docker, você precisa adicionar seu usuário ao grupo de usuários do docker :

sudo usermod -a -G docker myusername

Isso ocorre devido às permissões do arquivo de soquete:

srw-rw---- 1 root docker 0 Mar 20 07:43 /var/run/docker.sock

NÃO EXECUTE usermod SEM "-a", como sugerido em um dos outros comentários, ou isso limpará a configuração de grupos adicionais e deixará o grupo "docker"

Isto é o que vai acontecer:

➜  ~  id pawel
uid=1000(pawel) gid=1000(pawel) groups=1000(pawel),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare),998(docker)
➜  ~  usermod -G docker pawel
➜  ~  id pawel               
uid=1000(pawel) gid=1000(pawel) groups=1000(pawel),998(docker)

6

TLDR : Isso fez com que meu grupo de reuniões do Python resolvesse esse problema quando eu estava executando uma clínica na instalação do docker e a maioria dos usuários estava no OS X:

boot2docker init
boot2docker up

execute os exportcomandos que a saída fornecer, em seguida

docker info

deve dizer que funciona.


O Contexto (o que nos levou ao problema)

Liderei uma clínica na instalação do docker e a maioria dos participantes tinha o OS X, e encontramos esse problema e o superei em várias máquinas. Aqui estão as etapas que seguimos:

Primeiro, instalamos o homebrew (sim, alguns participantes não o possuíam):

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Em seguida, obtivemos o cask, que usamos para instalar o virtualbox e, em seguida, o brew para instalar o docker e o boot2docker (todos necessários para o OS X). Não use o sudo para o brew. :

brew install caskroom/cask/brew-cask
brew cask install virtualbox
brew install docker
brew install boot2docker

A solução

Foi quando encontramos o problema que o solicitante aqui teve. O seguinte corrigiu. Entendo que initera um contrato único, mas você provavelmente precisará executar upsempre que iniciar o Docker:

boot2docker init
boot2docker up

Então, quando upexecutado, ele fornece váriosexport comandos. Copie e cole e execute-os.

Finalmente docker info , você deve dizer que está instalado corretamente.

Para demonstração

O restante dos comandos deve demonstrá-lo. (no Ubuntu linux eu exigi o sudo.)

docker run hello-world
docker run -it ubuntu bash

Então você deve estar em um shell raiz no contêiner:

apt-get install nano
exit

Voltar para o bash de usuário nativo:

docker ps -l

Procure o identificador hexadecimal de cerca de 12 dígitos (0-9 ou af) em "ID do contêiner", por exemplo 456789abcdef. Você pode confirmar sua alteração e nomeá-la com um nome descritivo, como descriptivename:

docker commit 456789abcdef descriptivename`

5

Tudo o que você precisa para executar o Docker no Linux Ubuntu / Mint:

sudo apt-get -y install lxc
sudo gpasswd -a ${USER} docker
newgrp docker
sudo service docker restart

Opcionalmente, pode ser necessário instalar duas dependências adicionais se o acima não funcionar:

sudo apt-get -y install apparmor cgroup-lite
sudo service docker restart

1
Eu me dou +1 se fosse possível - eu estava procurando uma solução e encontrei a minha própria solução, que eu esqueci :)
— tomrozb

Isso me ajudou. Percebi que o serviço docker não estava em execução após a instalação, por isso sudo service docker startresolvi o problema no meu Ubuntu 14.04.
— razz0

3

Tentei as soluções aqui e o boot2docker não funcionou.

Minha solução: Desinstale o boot2docker no Mac, instale uma VM do Centos 7 no VirtualBox e trabalhe com o Docker dentro dessa VM.


3

Para mim, os seguintes passos funcionaram:

  1. Percebi que a execução docker run hello-worldfalha com esse erro como a pergunta, mas a execução sudo docker run hello-worldfuncionou.
  2. Eu adicionei meu usuário atual ao dockergrupo sudo adduser user docker,. Então você deve reiniciar sua máquina ou usar su - user(verifique usando o groupscomando se estiver no dockergrupo).

Depois disso, hello-worldcomeçou a trabalhar.

Minha resposta é baseada em Como posso usar o docker sem o sudo? o que explica o que deu errado.



Após adicionar self ao grupo, faça o `newgrp docker; newgrp primary-group isso cria um subshell, com o novo grupo primário de janela de encaixe e, em seguida, restabelece o grupo primário correto. (Um pouco de hack).
— Ctrl-alt-delor

2

Pelo que vale a pena, tentei todas as soluções nesta questão e nesta questão relacionada e nenhuma resolveu meu problema até desinstalar e reinstalar o VirtualBox . Esse processo atualizou o VirtualBox da versão 4.2.16 para 4.3.22 (o meu anterior estava sem uso no sistema há alguns meses).

Então boot2dockere dockertrabalhou sem outros ajustes.


2

Eu tive o mesmo problema. Um simples service docker restartresolveu o problema.


2

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.

sudo groupadd docker
sudo usermod -aG docker $USER

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

docker run hello-world

Origem: gerenciar o Docker como um usuário não raiz


1

Eu tive o mesmo problema e tentei várias coisas para corrigir isso, alterando o arquivo .bash_profile, entrando e saindo, sem qualquer sorte. No final, reiniciar minha máquina corrigiu.


0

Verifique se há

127.0.0.1    localhost

na tua

`/etc/hosts `

Arquivo.


0

Eu enfrentei o mesmo problema ao criar imagens do Docker a partir de Jenkins. Basta adicionar o usuário ao dockergrupo e reiniciar os serviços do Docker e, no meu caso, tive que reiniciar os serviços do Jenkins.

Este foi o erro que recebi:

http:///var/run/docker.sock/v1.19/build?cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&memory=0&memswap=0&rm=1&t=59aec062a8dd8b579ee1b61b299e1d9d340a1340: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
FATAL: Failed to build docker image from project Dockerfile
java.lang.RuntimeException: Failed to build docker image from project Dockerfile

Solution:

[root@Jenkins ssh]# groupadd docker
[root@Jenkins ssh]# gpasswd -a jenkins docker
Adding user jenkins to group docker
[root@Jenkins ssh]# /etc/init.d/docker restart
Stopping docker:                                           [  OK  ]
Starting docker:                                           [  OK  ]
[root@Jenkins ssh]# /etc/init.d/jenkins restart
Shutting down Jenkins                                      [  OK  ]
Starting Jenkins                                           [  OK  ]
[root@Jenkins ssh]#

-1

Outro motivo possível é que a visualização da CPU do BIOS não está ativada. Vá e ative-o primeiro!

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.