Estoy ejecutando Jenkins localmente y también tengo Docker instalado en mi máquina.
Tengo un trabajo de Jenkins que usa un archivo de Jenkins para
Tengo todos los complementos de Docker instalados en Jenkins, pero cuando se ejecuta el paso de compilación, obtengo...
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.39/build? buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&session=w6ypm3t1b0qefyxh9omfvntru&shmsize=0&t=app-web&target=&ulimits=null&version=1: dial unix /var/run/docker.sock: connect: permission denied
Parece que no puedo cambiar los permisos en
lrwxr-xr-x 1 macuser staff 72 Jun 30 20:36 docker.sock -> /Users/john/Library/Containers/com.docker.docker/Data/docker.sock
Cualquier ayuda muy apreciada
Su principal problema porque el usuario que se usa a través de Jenkins, probablemente llamado jenkins
, no tiene el permiso suficiente para ejecutar Docker.
Básicamente, debe hacer que el usuario se una al grupo de staff
.
Respondí esta pregunta hace unos días, la segunda mitad de la respuesta es lo que está buscando: ¿Cómo agregar un usuario a un grupo desde la línea de comandos de Mac OS X?
Pruébelo y avíseme si no funciona para usted con el resultado que obtuvo al intentar agregar el usuario al grupo de staff
Con Docker para Mac, dentro del contenedor encontrará que el socket de Docker es propiedad de root (esto es parte de la máquina virtual LinuxKit integrada). Utilizo el siguiente punto de entrada dentro de mi contenedor de Jenkins y ejecuto el punto de entrada como raíz, para reconfigurar automáticamente el grupo acoplable dentro del contenedor para que coincida con la identificación del grupo del archivo de socket, y luego paso desde la raíz al usuario de jenkins antes de ejecutar Jenkins. aplicación en sí. Esto tiene la ventaja de ser portátil, capaz de ejecutarse en cualquier escritorio o entorno de servidor, sin codificar el GID de la ventana acoplable en el contenedor:
#!/bin/sh # By: Brandon Mitchell <public@bmitch.net> # License: MIT # Source Repo: https://github.com/sudo-bmitch/jenkins-docker set -x # configure script to call original entrypoint set -- tini -- /usr/local/bin/jenkins.sh "$@" # In Prod, this may be configured with a GID already matching the container # allowing the container to be run directly as Jenkins. In Dev, or on unknown # environments, run the container as root to automatically correct docker # group in container to match the docker.sock GID mounted from the host. if [ "$(id -u)" = "0" ]; then # get gid of docker socket file SOCK_DOCKER_GID=`ls -ng /var/run/docker.sock | cut -f3 -d' '` # get group of docker inside container CUR_DOCKER_GID=`getent group docker | cut -f3 -d: || true` # if they don't match, adjust if [ ! -z "$SOCK_DOCKER_GID" -a "$SOCK_DOCKER_GID" != "$CUR_DOCKER_GID" ]; then groupmod -g ${SOCK_DOCKER_GID} -o docker fi if ! groups jenkins | grep -q docker; then usermod -aG docker jenkins fi # Add call to gosu to drop from root user to jenkins user # when running original entrypoint set -- gosu jenkins "$@" fi # replace the current pid 1 with original entrypoint exec "$@"
Puede encontrar el ejemplo completo, incluido el Dockerfile para instalar docker y gosu dentro de la imagen, en: https://github.com/sudo-bmitch/jenkins-docker
El mismo concepto se encuentra en un script de fix-perms
en mi imagen base que se puede aplicar a otros escenarios: https://github.com/sudo-bmitch/docker-base