¿Estoy tratando de conectarme a un demonio habilitado para TLS sin TLS?

221

Estoy tratando de aprender sobre Docker , pero sigo recibiendo mensajes de error crípticos (para mí).

Posiblemente, el ejemplo más simple de esto es intentar imprimir la versión de Docker que instalé:

$ 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?

Acabo de leer la guía del usuario y de seguir cada paso exactamente, así que me sorprende recibir este mensaje ... ¿Qué debo hacer ahora?

Acabo de notar que si no lo uso sudo, no obtengo el error:

$ 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

Por supuesto, esta no es una solución, ya que es posible que necesite usarla en sudoalgún momento ...

Acabo de encontrar otra página que dice " Si estás usando OS X, entonces no deberías usar sudo". No sé si significan solo para ese ejemplo, o en general.

Shawn
fuente
38
Estúpida pregunta, pero ¿has comenzado el demonio Docker?
Usman Ismail
He estado siguiendo la guía del usuario, así que sí, creo que se inició el Docker Daemon. ¿Cómo puedo verificar dos veces?
Shawn
55
En realidad has encontrado la solución. Con boot2docker nunca necesitarás sudo con linux, siempre necesitarás sudo. Esto se debe a que boot2docker realmente ejecuta esos comandos en un cuadro virtual que está configurado para acceder al daemon correctamente.
Usman Ismail
1
He tenido problemas con este tema y en funcionamiento sin sudo trabajado para mí
sak
66
Casi todas las respuestas son específicas de OS X (mencionan boot2docker), aunque OS X no se menciona explícitamente en la pregunta o las etiquetas. Si alguien está interesado en la respuesta genérica, vea mi respuesta.
Piotr Dobrogost

Respuestas:

150

Para mí, correr $(boot2docker shellinit 2> /dev/null)solucionó el problema.

Esto ejecuta la salida del boot2docker shellinitcomando (las tres set -x ...líneas) en su sesión de terminal actual, lo que le permite al dockercomando saber dónde encontrar la máquina virtual boot2docker.

Agregar $(boot2docker shellinit 2> /dev/null)al final de su ~/.bash_profilearchivo se asegurará de que el dockercomando esté configurado, cada vez que abra su terminal.


Para las personas que utilizan shell Fish: boot2docker shellinit ^ /dev/null | source.


Tenga en cuenta que 2> /dev/null(y el equivalente de pescado ^ /dev/null) son opcionales. Como sugirió @ pablo-fernandez, esto oculta las Writing ..líneas.

mauvm
fuente
Ya había hecho esto, pero lo agregaré a .bash_profile, buena idea
Shawn
definitivamente ayuda con boot2docker 1.5, pero el anterior boot2docker 1.2 no lo hizo correctamente
Max Markov
1
Agregué una redirección stderr para que no aparezcan las declaraciones "Escribiendo ...": $ (boot2docker shellinit 2> / dev / null)
Pablo Fernández
3
¡Gracias por mencionar la concha de pescado! Resolvió el problema para mí.
cyrillk
1
Como se menciona en la respuesta de Salvador Dalí a continuación, asegúrese de ejecutar también boot2docker startantes de ejecutar el shell init.
Kevin
78

Recibía el mismo error en MacOS con sudo y sin él.

Lo he resuelto con:

boot2docker start
$(boot2docker shellinit)

PD: Gracias a Alan. Descubrí que este enfoque se recomienda en su documentación oficial .

PS2: a veces boot2docker initpuede ser necesario antes de ejecutar dos comandos (gracias Aaron).

Salvador Dalí
fuente
Esto funcionó, pero no entiendo por qué. ¿Qué está haciendo $ (boot2docker shellinit)?
Emile
Esto funcionó en Mac OS X pero tengo la misma pregunta que Emile, es decir, ¿por qué funcionó?
Nissan
Esto no funcionó para mí en Mac OSX 10.10.4 con Docker Tools.
b01
No solo tenía que ejecutar boot2docker shellinit, sino también copiar y ejecutar cada uno de los comandos que mostraba. La documentación oficial por el enlace dice que este comando solo muestra el conjunto de comandos necesarios
Vitaliy Lebedev
También funcionó para mí en una máquina de Windows.
Noushad
55

En mi caso (Linux Mint 17) hice varias cosas, y no estoy seguro de cuáles son totalmente necesarias.

Incluí paquetes faltantes de Ubuntu:

$ sudo apt-get install apparmor lxc cgroup-lite

Se agregó un usuario al grupo docker:

$ sudo usermod -aG docker ${USER}

Demonio iniciado (openSUSE solo necesita esto)

$ sudo docker -d

Gracias \ Atribución


Gracias Usman Ismail , porque tal vez fue solo lo último ...

Estúpida pregunta, pero ¿has comenzado el demonio Docker? - Usman Ismail 17 de diciembre de 14 a 15:04


Gracias también a github @ MichaelJCole por la solución que funcionó para mí, porque no busqué el demonio cuando leí el comentario de Usman.

Comentario de 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

Gracias a la publicación de fredjean.net por notar los paquetes faltantes y olvidarse de las instrucciones predeterminadas de instalación de Ubuntu y google sobre otras formas

Resulta que los paquetes cgroup-lite y lxc no están instalados por defecto en Linux Mint. La instalación de ambos me permitió ejecutar bash en la imagen base y luego construir y ejecutar mi imagen.


Gracias al comentario de brettof86 sobre openSUSE

ElMesa
fuente
2
¡Gracias! En mi caso (Mint 17.1) fue el aspecto que faltaba.
Alexandre L Telles
2
Añadiendo a mí mismo grupo ventana acoplable hizo la cosa para mí, sudo adduser $USER docker. Truco para hacer que tenga efecto en la cáscara actual fue curgroup=$(id -gn) && newgrp docker && newgrp $curgroup, adaptado de superuser.com/questions/272061/...
Tero Tilus
1
Supongo que el hecho de que tenga una puntuación mucho más baja se debe a que hay más personas que usan OS X que Linux. Estoy usando Ubuntu 14.04 y funciona para mí.
agua helada
1
openSUSE y solo necesitaba iniciar el demonio
blockloop
Disculpe mi ignorancia sobre la máquina acoplable, pero no lo sé. Pero si se entera, indíquelo aquí en los comentarios o edite la respuesta. : D
ElMesa
49

El problema de subrayado es simple: falta de permiso para /var/run/docker.sockunixir socket de dominio.

Del capítulo de opción de socket Daemon de la referencia de la línea de comandos de Docker para Docker 1.6.0:

De forma predeterminada, se crea un socket de dominio Unix (o socket IPC) en /var/run/docker.sock, que requiere permiso de root o pertenencia a un grupo de acopladores .

Los pasos necesarios para otorgar derechos a los usuarios se describen muy bien en las instrucciones de instalación de Docker para Fedora :

Conceder derechos a los usuarios para usar Docker

La herramienta de línea de comandos de docker contacta el proceso de dacker de docker a través de un archivo socket /var/run/docker.sockpropiedad de root:root. Aunque se recomienda usar sudo para los comandos de docker, si los usuarios desean evitarlo, un administrador puede crear un grupo de docker, tenerlo propio /var/run/docker.socky agregar usuarios a este grupo.

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

Cierre sesión y vuelva a iniciar sesión para que los cambios anteriores surtan efecto. Tenga en cuenta que los paquetes Docker de algunas distribuciones de Linux (Ubuntu) ya se colocan /var/run/docker.socken el dockergrupo haciendo innecesarios los dos primeros pasos anteriores.

En el caso de OS X y boot2dockerla situación es diferente; el demonio Docker se ejecuta dentro de una VM, por lo que la DOCKER_HOSTvariable de entorno debe establecerse en esta VM para que el cliente Docker pueda encontrar el demonio Docker. Esto se realiza ejecutando $(boot2docker shellinit)en el shell.

Piotr Dobrogost
fuente
1
Hmm, mi situación es similar pero sutilmente diferente. Estoy corriendo en Ubuntu 14.04. Docker aparentemente instalado correctamente (al ingresar solo "docker" aparece la lista de comandos). Creé un grupo de acopladores e hice que mi usuario fuera miembro de él. Este es solo un sistema hogareño y solo estoy jugando con Docker. Sin embargo, cualquier cosa que no sea solo "docker" trae el error. Lo creo porque Docker no puede crear /var/run/docker.sock. En mi sistema / var / run hay un enlace simbólico a / run que es root: root y 755 perm, por lo que Docker no puede escribir allí. No estoy seguro de cuál sería mi solución a esto.
Steve Cohen
Piotr, esta explicación es muy útil. ¿Puede explicar por qué funciona "$ (boot2docker shellinit)", pero no funciona "boot2docker shellinit"? Entiendo que los paréntesis implican ejecución en una subshell, pero no he podido descifrar por qué es necesario hacer que Docker funcione correctamente cuando ninguno de los otros comandos lo requiere ...
Alex Edelstein
@AlexEdelstein La diferencia entre boot2docker shellinity otros comandos es que este comando no realiza ningún cambio en sí mismo, sino que solo genera (imprime) comandos que debe ejecutar usted mismo. Puede ejecutar boot2docker shellinitprimero y luego copiar y ejecutar manualmente cada comando desde su salida. Es más fácil ejecutar todos los comandos ejecutando boot2docker shelliniten un subproceso (con $()sintaxis) porque de esta manera cada línea de salida se ejecuta automáticamente como un comando de shell. Consulte docs.docker.com/installation/mac/#from-your-command-line donde se muestra en detalle.
Piotr Dobrogost
@SteveCohen Es posible que desee verificar que el servicio de Docker se esté ejecutando sudo service docker status. En mi Ubuntu 14.04 no se estaba ejecutando después de la instalación, lo que causó el error.
razz0
1
Gracias por vincular la documentación real de la causa raíz, resolvió mi problema
RonaldFindling
23

Asegúrese de que el demonio Docker se esté ejecutando:

service docker start

¡Eso me lo arregló!

superlogico
fuente
sudo service docker startpara mí
Milimétrico
systemctl enable docker.servicey systemctl start docker.service Para usuarios de system.d linux (Arch en mi caso)
PRDeving
sudo service docker restartpara mí
Frozen Flame
15
  1. Docker se llama a sí mismo un tiempo de ejecución autosuficiente para contenedores Linux. En términos simples, actúa como servidor y cliente.
  2. La $ docker versionconsulta de comando es interna para el ejecutable de Docker y no para el demonio / servicio en ejecución.
  3. $ docker images or $ docker ps or $ docker pull centos son comandos que envían consultas al dacker de servicio / dacker en ejecución.
  4. Docker por defecto admite conexiones TLS a su demonio / servicio.
  5. Solo si el usuario con el que inició sesión es parte del grupo de usuarios dockero si lo ha utilizado sudoantes del comando, por ejemplo $ sudo docker images, no requiere conectividad TLS.

Visite la página de documentación de Docker Proteja el socket del demonio Docker .

Desplácese un poco hacia la parte superior y busque warning sectionclaridad.

Yogesh Kamat
fuente
1
Las respuestas populares hasta ahora solo se aplican a OS X, mientras que esta es mucho más general, explica la causa y me permitió resolverlo en GNU / Linux.
sinisterstuf
1
@laffuste su comando LIMPIARÁ GRUPOS ADICIONALES DEL USUARIO. por la falta "-a"
Pawel Barcik
3
@PawelBarcik terrible error, gracias:sudo usermod -a -G docker {username}
laffuste
1
¿Cómo responde esta respuesta a la pregunta? ¿Cuál es la razón del error? ¿Como arreglarlo? (No estoy en OS X, por lo que las respuestas existentes no se aplican).
Piotr Dobrogost
13

Necesitarás hacer:

$boot2docker init
$boot2docker start

La siguiente configuración solucionó el 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
AL-Tamimi
fuente
1
Este comando también se puede usar para establecer las variables de entorno (en lugar de hacerlo manualmente):eval "$(boot2docker shellinit)"
Powers
11

Es posible que aún no tenga permiso para el archivo. Me sucedió después de agregarme al dockergrupo usando

sudo gpasswd -a user docker

pero aún no cerrar sesión.

Para resolver esto, puede volver a iniciar sesión o usar sg docker "docker <subcommand> ..."antes de cerrar sesión.

Si se encuentra en el grupo docker de /etc/group, usted debe ser capaz de funcionar sin la contraseña de escritura.

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 /

Ding-Yi Chen
fuente
7

En Ubuntu después de instalar lxc-docker , debe agregar su usuario al grupo de usuarios de docker :

sudo usermod -a -G docker myusername

Esto se debe a los permisos del archivo socket:

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

NO EJECUTE usermod SIN "-a" como se sugiere en uno de los otros comentarios o borrará la configuración de sus grupos adicionales y simplemente dejará el grupo "acoplador"

Esto es lo que pasará:

➜  ~  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)
Pawel Barcik
fuente
6

TLDR : Esto hizo que mi grupo de reunión de Python superara este problema cuando estaba ejecutando una clínica para instalar Docker y la mayoría de los usuarios estaban en OS X:

boot2docker init
boot2docker up

ejecuta los exportcomandos que te da la salida, luego

docker info

debería decirte que funciona.


El contexto (lo que nos trajo al problema)

Dirigí una clínica para instalar Docker y la mayoría de los asistentes tenían OS X, y nos encontramos con este problema y lo superé en varias máquinas. Aquí están los pasos que seguimos:

Primero, instalamos homebrew (sí, algunos asistentes no lo tenían):

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

Luego obtuvimos cask, que usamos para instalar virtualbox, y luego usamos brew para instalar docker y boot2docker (todo requerido para OS X) No use sudo para brew. :

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

La solución

Fue entonces cuando nos encontramos con el problema que el autor de la pregunta tenía aquí. Lo siguiente lo arregló. Entiendo que initfue un trato único, pero probablemente tendrá que correr upcada vez que inicie Docker:

boot2docker init
boot2docker up

Luego, cuando upse ha ejecutado, da varios exportcomandos. Copia y pega y ejecuta esos.

Finalmente docker infodebería decirte que está instalado correctamente.

A demo

El resto de los comandos deberían demostrarlo. (En Ubuntu Linux, requería sudo).

docker run hello-world
docker run -it ubuntu bash

Entonces deberías estar en un shell de raíz en el contenedor:

apt-get install nano
exit

Volver a su bash de usuario nativo:

docker ps -l

Busque el identificador hexadecimal de 12 dígitos (0-9 o af) en "ID de contenedor", p 456789abcdef. Ej . Luego puede confirmar su cambio y asignarle un nombre descriptivo, como descriptivename:

docker commit 456789abcdef descriptivename`
Aaron Hall
fuente
5

Todo lo que necesita para ejecutar Docker en Linux Ubuntu / Mint:

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

Opcionalmente, puede que necesite instalar dos dependencias adicionales si lo anterior no funciona:

sudo apt-get -y install apparmor cgroup-lite
sudo service docker restart
tomrozb
fuente
1
Me daría +1 si fuera posible. Estaba buscando una solución y encontré una solución que olvidé :)
tomrozb
Esto me ayudo. Me di cuenta de que el servicio Docker no se estaba ejecutando después de la instalación, por lo que sudo service docker startresolví el problema en mi Ubuntu 14.04.
razz0
3

Probé las soluciones aquí, y boot2docker no funcionó.

Mi solución: desinstalar boot2docker en la Mac, instalar una máquina virtual Centos 7 en VirtualBox y trabajar con Docker dentro de esa máquina virtual.

MondKin
fuente
3

Para mí, los siguientes pasos funcionaron:

  1. Me di cuenta de que la ejecución docker run hello-worldfalla con este error intercalado como en la pregunta, pero la ejecución sudo docker run hello-worldfuncionó.
  2. Agregué mi usuario actual al dockergrupo sudo adduser user docker,. Luego debe reiniciar su máquina o usar su - user(marque usando el groupscomando si está en el dockergrupo).

Después de eso, hello-worldcomenzó a trabajar.

Mi respuesta se basa en ¿Cómo puedo usar docker sin sudo? que explica lo que sale mal.


csharpfolk
fuente
Después de agregar self al grupo, haga `newcker docker; newgrp primary-group esto crea una subshell, con un nuevo grupo primario de docker, luego restablece el grupo primario correcto. (Un poco de un truco).
ctrl-alt-delor
2

Por lo que vale, probé todas las soluciones en esta pregunta y en esta pregunta relacionada y ninguna resolvió mi problema hasta que desinstalé y volví a instalar VirtualBox . Este proceso actualizó el VirtualBox de la versión 4.2.16 a 4.3.22 (mi anterior había estado sin uso en el sistema durante unos meses).

Luego boot2dockery dockertrabajó sin ningún otro ajuste.

daedalus
fuente
2

Yo tuve el mismo problema. Un simple service docker restartresuelto el problema.

ChaitanyaBhatt
fuente
2

El demonio Docker se une a un socket Unix en lugar de a un puerto TCP. Por defecto, el socket Unix es propiedad del usuario root y otros usuarios solo pueden acceder a él usando sudo. El demonio Docker siempre se ejecuta como usuario root.

sudo groupadd docker
sudo usermod -aG docker $USER

Cierre sesión y vuelva a iniciarla para que su membresía de grupo sea reevaluada.

docker run hello-world

Fuente: Administrar Docker como usuario no root

Shabbir Bata
fuente
1

Tuve el mismo problema e intenté varias cosas para solucionar esto, modificando el archivo .bash_profile, iniciando y cerrando sesión, sin suerte. Al final, reiniciar mi máquina lo arregló.

DavB
fuente
0

Asegúrate de que haya

127.0.0.1    localhost

en tus

`/etc/hosts `

expediente.

bolerovt
fuente
0

Me enfrenté al mismo problema cuando estaba creando imágenes Docker de Jenkins. Simplemente agregue el usuario al dockergrupo y luego reinicie los servicios de Docker y en mi caso tuve que reiniciar los servicios de Jenkins.

Este fue el error que obtuve:

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]#
Avinash Singh
fuente
-1

Otra posible razón es que la visualización de la CPU del BIOS no está habilitada. ¡Ve y habilítalo primero!

Xianlin
fuente