Cuando trato de ejecutar comandos simples de Docker como:
$ docker ps -aRecibo un mensaje de error:
Tengo permiso denegado... /var/run/docker.sock: connect: permiso denegado
Cuando compruebo los permisos con
$ ls -al /var/run/Veo esta línea:
srw-rw---- root docker docker.sockEntonces, sigo un consejo de muchos foros y agrego un usuario local al grupo docker:
$ sudo usermod -aG docker $USERPero no ayuda. Sigo recibiendo el mismo mensaje de error. ¿Cómo puedo arreglarlo?
Como se mencionó anteriormente en el comentario, los cambios no se aplicarán hasta que vuelva a iniciar sesión. Si estuviera haciendo un SSH y abriendo una nueva terminal, habría funcionado en la nueva terminal
Pero como estaba usando la GUI y abriendo la nueva terminal, los cambios no se aplicaron. Esa es la razón por la que el error no desapareció.
Entonces, el siguiente comando hizo su trabajo, solo se perdió un reinicio de sesión
sudo usermod -aG docker $USERPara aquellos nuevos en el shell, el comando:
$ sudo usermod -aG docker $USER necesita tener $USER definido en su shell. Esto suele estar allí de forma predeterminada, pero es posible que deba establecer el valor en su ID de inicio de sesión en algunos shells.
Cambiar los grupos de un usuario no cambia los inicios de sesión, terminales y shells existentes que un usuario tiene abiertos. Para evitar realizar un inicio de sesión nuevamente, simplemente puede ejecutar:
$ newgrp dockerpara obtener acceso a ese grupo en su shell actual.
Una vez que haya hecho esto, el usuario tiene acceso a la raíz en el servidor, así que solo haga esto para los usuarios en los que se confía con acceso sudo sin restricciones.
Como mi usuario es un usuario de AD, tengo que agregar el usuario de AD al grupo local editando manualmente el archivo /etc/group. Desafortunadamente, los comandos adduser no parecen ser conscientes de nsswitch y no reconocen a un usuario que no está definido localmente al agregar a alguien a un grupo.
Luego reinicie o actualice /etc/group. Ahora, puede usar la ventana acoplable sin sudo.
Saludos.
Asegúrese de que su variable $USER esté configurada
$ echo $USER $ sudo usermod -aG docker $USERcerrar sesión
Al iniciar sesión, reinicie el servicio docker
$ sudo systemctl restart docker $ docker psMotivo: el mensaje de error significa que el usuario actual no puede acceder al motor acoplable, porque el usuario no tiene suficientes permisos para acceder al socket de UNIX para comunicarse con el motor.
Arreglo rapido:
Ejecute el comando como root usando sudo.
sudo docker psCambie los permisos de /var/run/docker.sock para el usuario actual.
sudo chown $USER /var/run/docker.sockPrecaución : Ejecutar sudo chmod 777 /var/run/docker.sock resolverá su problema pero abrirá el socket de la ventana acoplable para todos, lo cual es una vulnerabilidad de seguridad como lo señaló @AaylaSecura. Por lo tanto, no debe usarse, excepto con fines de prueba en el sistema local.
Solución permanente:
Agregue el usuario actual al grupo docker.
sudo usermod -a -G docker $USERNota: Debe cerrar sesión y volver a iniciar sesión para que los cambios surtan efecto.
Consulte este blog para obtener más información sobre cómo administrar Docker como usuario no root.
Debe administrar la ventana acoplable como un usuario no root. Para crear el grupo docker y agregar su usuario:
Cree el grupo de acopladores.
$ sudo groupadd docker
Agregue su usuario al grupo docker.
$ sudo usermod -aG docker $USER
Cierre la sesión y vuelva a iniciarla para que se vuelva a evaluar la pertenencia a su grupo.
Si realiza la prueba en una máquina virtual, puede ser necesario reiniciar la máquina virtual para que los cambios surtan efecto.
En un entorno Linux de escritorio como X Windows, cierre la sesión por completo y luego vuelva a iniciarla.
En Linux, también puede ejecutar el siguiente comando para activar los cambios en los grupos:
$ newgrp docker
Verifique que pueda ejecutar los comandos de la ventana acoplable sin sudo.
$ docker run hello-world
bash en el contenedor como usuario raíz docker exec -it --user root <dc5> bash
crear un grupo docker si aún no se ha creado groupadd -g 999 docker
agregar usuario al grupo docker usermod -aG docker jenkins
cambiar permisos chmod 777 /var/run/docker.sock
Cuando trato de ejecutar comandos simples de docker como:
$ docker ps -aRecibo un mensaje de error:
Got permission denied ... /var/run/docker.sock: connect: permission denied.[…] ¿Cómo puedo arreglarlo?
TL; DR: hay dos formas (la primera, también mencionada en la pregunta en sí, fue abordada ampliamente por otras respuestas, pero tiene problemas de seguridad ; así que explicaré este problema y desarrollaré la segunda solución que también puede ser aplicable para este caso de uso bastante sensato).
Solo para recordar el contexto, el socket del demonio Docker es propiedad de root:docker :
$ ls -l /var/run/docker.sock srw-rw---- 1 root docker 0 janv. 28 14:23 /var/run/docker.sock por lo tanto, con esta configuración predeterminada, es necesario anteponer todos los comandos CLI de la ventana acoplable con sudo .
Para evitar esto, uno puede:
agregue la cuenta de usuario de uno ( $USER ) al grupo docker , pero es bastante arriesgado hacerlo en la estación de trabajo personal, ya que esto equivaldría a proporcionar todos los programas ejecutados por el usuario con permisos de root sin ninguna solicitud de contraseña de sudo ni auditoría .
Ver también:
de lo contrario, se puede anteponer sudo automáticamente sin escribir sudo docker manualmente: para este objetivo, una solución consiste en agregar el siguiente alias en ~/.bashrc (ver, por ejemplo, este hilo para más detalles):
__docker() { if [[ "${BASH_SOURCE[*]}" =~ "bash-completion" ]]; then docker "$@" else sudo docker "$@" fi } alias docker=__dockerEntonces uno puede probar esto abriendo una nueva terminal y escribiendo:
docker run --pul〈TAB〉 # → docker run --pull # autocompletion works docker run --pull always --rm -it debian:11 # ask one's password \docker run --help # bypass the alias (thanks to the \) and ask no passwordingrese el comando y explore la ventana acoplable sin el comando sudo
sudo chmod 666 /var/run/docker.sock
*** Nota importante sobre estas respuestas: el grupo docker no siempre es "docker", a veces es "dockerroot", por ejemplo, el caso de la instalación de Centos 7 por
sudo yum install -y dockerLo primero que debes hacer, después de instalar Docker, es
sudo tail /etc/groupdebería decir algo como
...... sshd:x:74: postdrop:x:90: postfix:x:89: yourusername:x:1000:yourusername cgred:x:996: dockerroot:x:995:En este caso, es "dockerroot" y no "docker". Entonces,
sudo usermod -aG dockerroot yourusername logoutTienes que usar el ejecutor pns en lugar de la ventana acoplable. ejecute el siguiente parche que modifica el mapa de configuración y ya está todo listo.
kubectl -n argo patch cm workflow-controller-configmap -p '{"data": {"containerRuntimeExecutor": "pns"}}' ;referencia: https://www.youtube.com/watch?v=XySJb-WmL3Q&list=PLGHfqDpnXFXLHfeapfvtt9URtUF1geuBo&index=2&t=3996s