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:
# pacman -S docker
Fedora
# dnf install docker
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):
# systemctl enable docker
Comience ahora (o reinicie):
# systemctl start docker
Ahora, por defecto (si falta el grupo Docker), el socket 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 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 . Verifique grep 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):
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)
Es posible que deba cerrar sesión y volver a iniciarla (o su - (user)
), ejecutar id
para ver si está en el grupo.
Luego puede usar Docker sin sudo / root:
$ docker version --format '{{.Server.Version}}'
1.9.1
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).