Solución:
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 de socket para comunicarse. Cuando corres docker
comandos, usa este socket para hablar con el demonio de 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 instalaría 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 se pueda actualizar fácilmente.
Arco:
# pacman -S docker
Fedora:
# dnf install docker
Como se mencionó anteriormente, el demonio puede estar deshabilitado de forma predeterminada. Si desea utilizar Docker, el demonio debe estar ejecutándose.
Habilítelo (para que se inicie al arrancar):
# systemctl enable docker
Inícielo ahora (o reinicie):
# systemctl start docker
Ahora, de forma predeterminada (si falta el grupo de Docker), el socket de Docker es propiedad de root:
# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock
Esta es la razón por la que un usuario normal no puede hablar con el demonio de la ventana acoplable. Un usuario normal no tiene permisos suficientes para acceder al socket. No puede alcanzar el demonio, por lo que asume que no se está ejecutando y muestra este error: Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Esta es la razón por la 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, un grupo llamado docker
se crea 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. Cheque grep docker /etc/group
para ver si existe un grupo de este tipo en su sistema. Si ya está usando ese grupo (su usuario está en él), deberá configurar Docker para usarlo:
En /etc/sysconfig/docker
, agregar -G dockerroot
(nota: es una solución alternativa, no la mejor solución):
OPTIONS='--selinux-enabled -G dockerroot'
Después de reiniciar el demonio, su usuario podrá acceder al socket:
# systemctl restart docker
# ls -la /var/run/docker.sock
srw-rw---- 1 root dockerroot 0 Apr 28 17:32 /var/run/docker.sock
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:
# groupadd docker
# systemctl restart docker
El archivo de socket será propiedad de ese grupo:
# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock
Su usuario debe estar en el docker
grupo para poder acceder al socket:
# usermod -aG docker (user)
Puede que tenga que cerrar la sesión y volver a iniciarla (o su - (user)
), correr id
para ver si estás en el grupo.
Luego puede usar Docker sin sudo / root:
$ docker version --format '{{.Server.Version}}'
1.9.1
Finalmente, una advertencia. Solo los usuarios de confianza deben poder controlar su demonio de Docker. Consulte 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.)
Necesitas sumarte a la docker
agrupar y activar el grupo (cerrando la sesión y volviendo a iniciarla o ejecutando newgrp docker
) correr docker
comandos. El mensaje de error es simplemente engañoso.
sudo usermod -aG docker [username]
luego cierre sesión y vuelva a iniciar sesión