2017-10-08 3 views
1

En utilisant l'image jenkins officielle, j'ai installé docker et docker-composer et jenkins ajoutés au groupe docker (GID 999 dans le récipient). Après cela, j'ai partagé le /var/run/docker.sock de l'hôte afin de permettre à jenkins de créer des conteneurs "frères et sœurs". Il arrive que le fichier original a GID 134 et avec ce GID est monté. Je reçois l'erreur suivante:Docker volume volume La discordance GID provoque une erreur: composer unix /var/run/docker.sock: connect: permission refusée

demo_1 | docker: 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.32/containers/create : dial unix /var/run/docker.sock: connect: permission denied. demo_1 | See 'docker run --help'.

Une idée sur la façon de résoudre ce problème?

Mon minimum (et non optimisé encore) Dockerfile est:

FROM jenkins/jenkins:lts 

USER root 

RUN apt-get update && apt-get install -y apt-transport-https \ 
    ca-certificates \ 
    curl \ 
    gnupg2 \ 
    software-properties-common 

RUN curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | apt-key add - 
RUN apt-key fingerprint 0EBFCD88 
RUN add-apt-repository \ 
    "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \ 
    $(lsb_release -cs) \ 
    stable" 

RUN apt-get update 
RUN apt-get install -y docker-ce docker-compose 
RUN usermod -aG docker jenkins 

USER jenkins 
RUN newgrp docker 

J'ai aussi créé un docker-Compose pour le tester:

version: '2' 
services: 
    demo: 
     build: . 
     ports: 
      - 8080:8080 
      - 50000:50000 
     volumes: 
      - /var/run/docker.sock:/var/run/docker.sock 
     command: > 
      /bin/sh -c " 
       set -e 
       groups 
       docker -v 
       docker-compose -v 
       ls -ln /var/run/docker.sock 
       id jenkins 
       docker run hello-world 
      " 

La sortie est:

demo_1 | jenkins staff docker 
demo_1 | Docker version 17.09.0-ce, build afdb6d4 
demo_1 | docker-compose version 1.8.0, build unknown 
demo_1 | srw-rw---- 1 0 134 0 Sep 30 07:36 /var/run/docker.sock 
demo_1 | uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins),50(staff),999(docker) 
demo_1 | docker: 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.32/containers/create: dial unix /var/run/docker.sock: connect: permission denied. 
demo_1 | See 'docker run --help'. 

Répondre

0

J'ai corrigé le problème, donc je laisse cette question ouverte pour voir si une meilleure apparaît.

Comme le fichier /var/run/docker.sock appartient à la racine, qui ont le même UID, j'ai ajouté jenkins à la liste des sudoers sans avoir besoin de taper le mot de passe:

RUN adduser jenkins sudo 
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers 

Cette résolu le problème. Je ne l'aime pas, mais ça marche.