docker - hub - ¿Estoy intentando conectarme a un demonio habilitado para TLS sin TLS?
docker tutorial (20)
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 seguir cada paso exactamente, así que me sorprende que reciba este mensaje ... ¿Qué debo hacer ahora?
Acabo de notar que si no 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 usar
sudo
algún lugar del camino ...
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.
- Docker se llama a sí mismo un tiempo de ejecución autosuficiente para contenedores Linux. En términos simples, actúa tanto como servidor como cliente.
-
La consulta del comando
$ docker version
es interna para el ejecutable de Docker y no para el demonio / servicio en ejecución. -
$ docker images or $ docker ps or $ docker pull centos
son comandos que envían consultas al dacker de servicio / dacker de Docker. - Docker por defecto admite conexiones TLS a su demonio / servicio.
-
Solo si el usuario con el que inició sesión es parte de la
docker
grupo de usuarios o si ha utilizadosudo
antes 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 la
warning section
para mayor claridad.
Asegúrate de que haya
127.0.0.1 localhost
en tus
`/etc/hosts `
archivo.
Asegúrese de que el demonio Docker se esté ejecutando:
service docker start
¡Eso me lo arregló!
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
El problema de subrayado es simple: falta de permiso para
/var/run/docker.sock
socket de dominio unix.
Desde el chapter de opción de socket Daemon de la referencia de Docker Command Line 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 docker .
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 comando docker contacta el proceso de dacker de docker a través de un archivo de socket
/var/run/docker.sock
propiedad deroot:root
. Aunque se recomienda usar sudo para los comandos de Docker, si los usuarios desean evitarlo, un administrador puede crear un grupo de Docker, tener su propio/var/run/docker.sock
y 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 iniciarla para que los cambios anteriores surtan efecto.
Tenga en cuenta que los paquetes de Docker de algunas distribuciones de Linux (Ubuntu) ya colocan
/var/run/docker.sock
en el grupo de
docker
haciendo innecesarios los dos primeros pasos anteriores.
En el caso de OS X y
boot2docker
la situación es diferente;
el demonio Docker se ejecuta dentro de una VM, por lo que la variable de entorno
DOCKER_HOST
debe establecerse en esta VM para que el cliente Docker pueda encontrar el demonio Docker.
Esto se realiza ejecutando
$(boot2docker shellinit)
en el shell.
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 de 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)
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 a la
docker
grupo:
$ 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 ...
Pregunta estúpida, 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 github@MichaelJCole el demonio cuando leí el comentario de Usman.
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 brettof86 de brettof86 sobre openSUSE
Es posible que aún no tenga el permiso para el archivo.
Me sucedió después de
docker
grupo
docker
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 está en la
docker
grupo en
/etc/group
, debería poder ejecutarlo sin escribir la contraseña.
Me enfrenté al mismo problema cuando estaba creando imágenes Docker de Jenkins.
Simplemente agregue el usuario al grupo de
docker
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]#
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
Otra posible razón es que la visualización de la CPU del BIOS no está habilitada. ¡Ve y habilítalo primero!
Para mí, ejecutar
$(boot2docker shellinit 2> /dev/null)
solucionó el problema.
Esto ejecuta la salida del comando
boot2docker shellinit
(las tres líneas
set -x ...
) en su sesión de terminal actual, que le permite al comando
docker
saber dónde encontrar la máquina virtual boot2docker.
Agregar
$(boot2docker shellinit 2> /dev/null)
al final de su archivo
~/.bash_profile
se asegurará de que el comando
docker
esté configurado, cada vez que abra su terminal.
Para las personas que usan Fish Shell:
boot2docker shellinit ^ /dev/null | source
boot2docker shellinit ^ /dev/null | source
.
Tenga en cuenta que
2> /dev/null
(y el equivalente de Fish
^ /dev/null
) son opcionales.
Como sugirió @ pablo-fernandez, esto oculta las líneas
Writing ..
Para mí, los siguientes pasos funcionaron:
-
Me di cuenta de que ejecutar
docker run hello-world
falla con este error marcado como en la pregunta, pero ejecutarsudo docker run hello-world
funcionó. -
Agregué mi usuario actual al grupo de
docker
,sudo adduser user docker
. Luego debe reiniciar su máquina o usarsu - user
(verifique usando el comandogroups
si está en el grupodocker
).
Después de eso,
hello-world
comenzó a funcionar.
Mi respuesta se basa en ¿Cómo puedo usar docker sin sudo? que explica lo que sale mal.
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 reinstalé 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
boot2docker
y
docker
funcionaron sin ningún otro ajuste.
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.
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 se puede requerir
boot2docker init
antes de ejecutar dos comandos (gracias Aaron).
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, es posible que necesite instalar dos dependencias adicionales si lo anterior no funciona:
sudo apt-get -y install apparmor cgroup-lite
sudo service docker restart
Tuve el mismo problema e intenté varias cosas para solucionarlo, modificando el archivo .bash_profile, iniciando y cerrando sesión, sin suerte. Al final, reiniciar mi máquina lo arregló.
Yo tuve el mismo problema.
Un simple
service docker restart
resolvió el problema.
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 comandos de
export
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
init
fue un trato de una sola vez, pero probablemente tendrás que correr cada vez que inicies docker:
boot2docker init
boot2docker up
Luego, cuando se ha ejecutado, da varios comandos de
export
.
Copia y pega y ejecuta esos.
Finalmente, la
docker info
debería decirte que está correctamente instalado.
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", por ejemplo,
456789abcdef
.
Luego puede confirmar su cambio y asignarle un nombre descriptivo, como
descriptivename
:
docker commit 456789abcdef descriptivename`