El servicio Docker se ejecuta claramente:
$ systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2015-12-28 19:20:50 GMT; 3 days ago
Docs: https://docs.docker.com
Main PID: 1015 (docker)
CGroup: /system.slice/docker.service
└─1015 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs
$ ps wuf -u root | grep $(which docker)
root 1015 0.0 0.3 477048 12432 ? Ssl 2015 2:26 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs
Sin embargo, Docker se niega a hablar con él:
$ docker info
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Estoy ejecutando la configuración predeterminada de Docker , es decir, no he cambiado ningún /etc
archivo relacionado con este servicio.
Cual podría ser el problema aquí?
arch-linux
docker
l0b0
fuente
fuente
sudo systemctl start docker
arregló, el demonio realmente no estaba corriendo ...Esta pregunta ya ha sido respondida, pero aquí hay una información adicional.
No importa si está en Arch u otra distribución como Fedora o Ubuntu, Docker usa un archivo socket para comunicarse. Cuando ejecuta
docker
comandos, utiliza este socket para hablar con el demonio Docker. Por supuesto, el demonio debe estar ejecutándose (y a menudo está deshabilitado de manera predeterminada), pero si su usuario no puede acceder al socket, tampoco podrá comunicarse con el demonio.Primero debe instalar Docker desde el repositorio de la distribución. Algunas personas descargan un script de instalación y lo canalizan a un shell (
curl ... | sh
), pero se recomienda instalarlo desde el repositorio para que pueda actualizarse fácilmente.Arco:
Fedora
Como se mencionó anteriormente, el demonio puede estar deshabilitado por defecto. Si quieres usar Docker, el demonio debe estar ejecutándose.
Habilítelo (para que se inicie en el arranque):
Comience ahora (o reinicie):
Ahora, por defecto (si falta el grupo Docker), el socket Docker es propiedad de root:
Esta es la razón por la cual un usuario normal no puede hablar con el demonio docker. Un usuario normal no tiene permisos suficientes para acceder al socket. No puede alcanzar el demonio, por lo que supone que no se está ejecutando y muestra este error:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Es por eso que muchas personas simplemente inician todos los comandos de Docker como root, usando
sudo
. Pero como se describe en la otra respuesta, Docker tiene su propio mecanismo para eso, por lo que no es necesario usar sudo.Idealmente,
docker
se crea un grupo llamado al instalar Docker. Sin embargo, si ese grupo no existe cuando se inicia el demonio, el archivo de socket es propiedad de root.En algunos casos, ese grupo solía tener un nombre diferente, como
dockerroot
en Fedora . Verifiquegrep docker /etc/group
si hay tal grupo en su sistema. Si ya está usando ese grupo (su usuario está en él), necesitará configurar Docker para usarlo:En
/etc/sysconfig/docker
, agregue-G dockerroot
(nota: es una solución alternativa, no la mejor solución):Después de reiniciar el demonio, su usuario podrá acceder al socket:
De lo contrario, la forma oficial sería utilizar el grupo llamado
docker
. Si existe, Docker lo usará automáticamente, es decir, establecerá el grupo del socket en ese grupo. Si no existe, todo lo que necesita hacer es crearlo y reiniciar el demonio:El archivo de socket será propiedad de ese grupo:
Su usuario debe estar en el
docker
grupo para poder acceder al socket:Es posible que deba cerrar sesión y volver a iniciarla (o
su - (user)
), ejecutarid
para ver si está en el grupo.Luego puede usar Docker sin sudo / root:
Finalmente, una palabra de advertencia. Solo los usuarios de confianza deberían poder controlar tu demonio Docker . Ver https://docs.docker.com/engine/security/security/ .
(Pero, por supuesto, lo mismo es cierto para sudo: solo los usuarios de confianza deben estar en el
wheel
grupo).fuente
luego cierre sesión y vuelva a iniciar sesión
fuente
Después de investigar un poco para resolver este problema en mi sistema Linux, pensé en escribir esta respuesta. Esto es lo que hice para solucionar el problema.
En Fedora 22
Instalación de Docker:
Después de instalar Docker:
Se debe agregar un usuario al grupo acoplable.
El Docker Daemon necesita ser iniciado
Puedes configurar el demonio para que comience en el arranque
Puede verificar que el servicio Docker se esté ejecutando
Y un último cheque final
fuente
pacman
, usando ensystemctl
lugar deservice
+chkconfig
).Si está utilizando la variante Fedora 23 o Redhat, edite
/etc/sysconfig/docker
y modifique lo siguienteReinicia la ventana acoplable.
Asegúrese de agregar este grupo al sistema y agregarse al grupo.
fuente
Este comando me funciona
Encontré la solución en esta página si necesita más documentación. ¿Por qué no permitimos que usuarios no root ejecuten Docker en CentOS, Fedora o RHEL?
fuente
Si inició su motor de docker con: sudo service docker start
no puede conectarse con un usuario normal, incluso si se ha agregado al grupo 'docker'.
Simplemente puede detenerlo con: sudo service docker stop
e iniciarlo como un usuario normal: inicio del acoplador de servicio
fuente
docker group
hasta ahora.sudo service start
trabajó para mi. HOwever, observará si hay algo nuevo.También tuve el mismo problema. El problema estaba en los sockets asignados a docker-daemon y docker-client.
Primero, no se configuró el permiso para el docker-client en docker.sock.
sudo usermod -aG docker $USER
Luego verifique su archivo bash donde se ejecuta el docker-client. Para mí, se configuró en 0.0.0.0:2375, mientras que docker-daemon se estaba ejecutando en un socket de Unix. (Se estableció en el archivo de configuración de dockerd).
Solo comente la línea ofensiva y funcionará bien.
Pero si desea que funcione en el puerto TCP en lugar del socket Unix, cambie el archivo de configuración de dockerd, configúrelo en 0.0.0.0.2375 y mantenga la línea en bash como está si está presente o configúrelo en 0.0. 0.0: 2375.
fuente
Estos son los pasos que seguí para arreglar lo siguiente
Agréguese al grupo acoplable
usermod -aG docker $USER
Se corrigieron los permisos en docker socker y comando.
sudo chgrp docker /usr/bin/docker
sudo chgrp docker /var/run/docker.sock
$ ll $(which docker) -rwxr-xr-x 1 root docker 18991768 08.07.2017 22:57 /usr/bin/docker*
$ ll /var/run/docker.sock srw-rw---- 1 root docker 0 23.07.2017 10:21 /var/run/docker.sock
Agregue variables al entorno de configuración para el comando docker
export DOCKER_HOST=unix:///var/run/docker.sock
Docker de descanso
sudo systemctl restart docker
fuente