web-dev-qa-db-fra.com

Erreur des autorisations de Docker dans Docker

J'ai un menu fixe dans la configuration de menu fixe pour CI. Pour l’essentiel, la machine est dotée d’un serveur CI Jenkins qui utilise le même socle de connexion des machines pour créer des nœuds pour CI. 

Cela fonctionnait très bien jusqu'à ce que je mette à jour récemment Docker. J'ai identifié le problème, mais je n'arrive pas à trouver la bonne magie pour le faire fonctionner.

Host $ docker exec -it myjenkins bash
jenkins@container $ docker ps
Got permission denied while trying to connect to the Docker daemon 
socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/json: dial unix /var/run/docker.sock: connect: permission denied

Host $ docker exec -it -u root -it myjenkins bash
root@container $ docker ps 
... docker ps from Host container yay! ...

Alors voici ce que je suppose. J'ai accès au socket du docker hôte depuis le conteneur, mais je ne peux apparemment pas donner l'autorisation à l'utilisateur jenkins.

J'ai ajouté le groupe Docker et l'utilisateur jenkins au groupe Docker. Mais je reçois toujours la même erreur. J'ai recommencé plusieurs fois, alors je ne sais plus quoi faire. 

Existe-t-il un moyen de forcer les autorisations d'un utilisateur sur un socket particulier?

12
Brandon Bertelsen

Vous devez mapper le gid du groupe de dockers de votre hôte sur le gid d'un groupe auquel jenkins appartient dans votre conteneur. Voici un exemple de mon Dockerfile montrant comment j'ai construit une image d'esclave Jenkins:

ARG DOCKER_GID=993

RUN groupadd -g ${DOCKER_GID} docker \
  && curl -sSL https://get.docker.com/ | sh \
  && apt-get -q autoremove \
  && apt-get -q clean -y \
  && rm -rf /var/lib/apt/lists/* /var/cache/apt/*.bin 

RUN useradd -m -d /home/jenkins -s /bin/sh jenkins \
  && usermod -aG docker jenkins

Le 993 se trouve être le gid de docker sur l'hôte dans cet exemple, vous devez l'ajuster à votre environnement.


Solution depuis l'OP: .__ Si la reconstruction ne vous est pas envisageable, vous pouvez configurer le groupe de menus en conséquence en utilisant root et ajouter l'utilisateur. Si vous avez déjà essayé cela, vous devrez peut-être supprimer le groupe sur l'esclave (groupdel docker): 

docker exec -it -u root myjenkins bash
container $ groupadd -g 993 docker
container $ usermod -aG docker jenkins
15
BMitch

Personnellement, je viens de faire ceci:

Sudo gpasswd -a $USER docker 

Et ça a fonctionné

1
H.Gmz

Exécutez la commande avec votre utilisateur root en incluant Sudo au début.

0
abbas