web-dev-qa-db-fra.com

chmod: modification des autorisations de 'myscript.sh': opération non autorisée

Lors de l'exécution du fichier docker suivant, j'obtiens "chmod: changing permissions of '/scripts/entrypoint.sh': Operation not permitted" Erreur.

FROM sonarqube:7.7-community
ADD plugins/* /plugins/
ADD scripts/* /scripts/
ADD conf/* /conf/
ADD bin/* /bin/
RUN chmod -R a+X /scripts/myScript.sh
ENTRYPOINT ["/scripts/myScript.sh"]

Mais quand j'ajoute USER root ça fonctionne. Mais je ne veux pas l'exécuter avec root. De toute façon je peux l'exécuter sans root?

8

Définissez les autorisations avant de créer l'image

chmod +x scripts/myScript.sh
docker build .

docker conservera les autorisations lors de la copie des fichiers.

3
Gerald Schneider

La modification des autorisations des fichiers que vous ne possédez pas sous Linux nécessite un accès root, et la commande COPY copie très probablement le fichier en tant que root. Vous pouvez revenir à l'utilisateur sonarqube après avoir fixé les autorisations. Voici un exemple de Dockerfile pour cela:

FROM sonarqube:7.7-community
COPY plugins/ /plugins/
COPY scripts/ /scripts/
COPY conf/ /conf/
COPY bin/ /bin/
USER root
RUN chmod 755 /scripts/myScript.sh
USER sonarqube
ENTRYPOINT ["/scripts/myScript.sh"]

Remarque Je suis également passé d'ADD à COPY car vous ne tirez pas d'URL distantes ou n'extrayez pas de fichiers tar/Zip. Le * est également implicite lors de la copie d'un répertoire. Pour un seul script, vous n'avez pas besoin du -R option récursive, et je suis explicite avec les autorisations car les scripts Shell nécessitent également un accès en lecture par tous les utilisateurs.

Si vous souhaitez que le script soit la propriété de sonarqube, vous pouvez exécuter:

COPY --chown=sonarqube:sonarqube scripts/ /scripts/

Cela devrait permettre à l'utilisateur de modifier les autorisations sur le script sans changement USER, mais peut donner à cet utilisateur plus d'accès que vous ne souhaitez modifier le script à l'intérieur du conteneur.

3
BMitch

Vérifiez les autorisations sur le répertoire/scripts à l'aide de ls -ld scripts. Il se peut que votre utilisateur ne dispose pas d'une autorisation d'écriture sur ce répertoire.

1
macrokernel

utiliser Sudo chmod au lieu d'utiliser simplement chmod

0
vishnu dk