web-dev-qa-db-fra.com

Jenkins mauvaises autorisations de volume

J'ai une machine virtuelle hébergeant Oracle Linux sur laquelle j'ai installé Docker et créé des conteneurs à l'aide d'un fichier docker-compose. J'ai placé le volume jenkins dans un dossier partagé, mais lors du démarrage du docker-compos up, le message d'erreur suivant s'affiche pour Jenkins:

jenkins | touch: ne peut pas toucher ‘/var/jenkins_home/copy_reference_file.log’: autorisation refusée jenkins | Impossible d'écrire dans /var/jenkins_home/copy_reference_file.log. Mauvaises autorisations de volume? Jenkins est sorti avec le code 1

Voici la déclaration des volumes

  volumes:
    - "/media/sf_devops-workspaces/dev-tools/continuous-integration/jenkins:/var/jenkins_home"
7
Taoufik Jabbari

Le problème est que votre utilisateur dans le conteneur a un ID utilisateur différent: groupid en tant qu'utilisateur sur l'hôte.

vous avez deux possibilités:

  1. Vous pouvez vous assurer que l'utilisateur du conteneur a le même ID utilisateur: ID de groupe, comme l'utilisateur de l'hôte, qui a accès au volume monté. Pour cela, vous devez ajuster l'utilisateur dans le fichier Docker. Créez un utilisateur dans le fichier docker avec le même ID utilisateur: ID groupe, puis basculez vers cet utilisateur https://docs.docker.com/engine/reference/builder/#user

  2. Vous pouvez vous assurer que l'utilisateur sur l'hôte a le même ID utilisateur: ID groupe, comme l'utilisateur du conteneur. Pour cela, entrez le conteneur avec docker exec -it <container-name> bash et affichez l'ID utilisateur id -u <username> l'ID groupe id -G <username>. Modifiez les autorisations du volume monté sur cet ID utilisateur: ID groupe.

5
haschibaschi

Comme haschibaschi a déclaré, votre utilisateur dans le conteneur a un ID utilisateur différent: identificateur de groupe que l'utilisateur sur l'hôte.

Pour contourner ce problème, vous devez démarrer le conteneur sans le mappage de volume (problématique), puis exécutez bash sur le conteneur:

docker run -p 8080:8080 -p 50000:50000 -it jenkins bin/bash

Une fois dans le shell du conteneur, exécutez la commande id et vous obtiendrez des résultats tels que:

uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins)

Quittez le conteneur, allez dans le dossier que vous essayez de mapper et exécutez:

chown -R 1000:1000 .

Avec les autorisations qui correspondent maintenant, vous devriez pouvoir exécuter la commande d'origine de docker avec le mappage de volume.

1
Vice

La solution de facilité consiste à utiliser le paramètre -u. Gardez à l'esprit que cela fonctionnera en tant qu'utilisateur root (uid = 0)

docker run -u 0 -d -p 8080:8080 -p 50000:50000 -v /data/jenkins:/var/jenkins_home jenkins/jenkins:lts
0
Kiem Nguyen

Cette erreur résout en utilisant le commnad suivant.

allez à votre chemin de montage de données Jenkins:/media

Exécutez la commande suivante: 

cd /media
Sudo chown -R ubuntu:ubuntu sf_devops-workspaces

redémarrer le conteneur docker jenkins

docker-compose restart jenkins
0
Mayur Kothari