Comment puis-je copier Docker en tant que non root?


143

Lors de la création d'une image Docker, comment insérer COPYun fichier dans l'image pour que le fichier résultant appartienne à un utilisateur autre que root?

Réponses:


206

Pour les versions v17.09.0-ce et plus récentes

Utilisez l'indicateur facultatif --chown=<user>:<group>avec les commandes ADDou COPY.

Par exemple

COPY --chown=<user>:<group> <hostPath> <containerPath>

La documentation de l'indicateur --chown est maintenant disponible sur la page principale de référence de Dockerfile .

Le problème 34263 a été fusionné et est disponible dans la version 17.09.0-ce .


Pour les versions antérieures à la v17.09.0-ce

Docker ne prend pas en charge en COPYtant qu'utilisateur autre que root. Vous devez chown/ chmodle fichier après la COPYcommande.

Exemple de Dockerfile:

from centos:6
RUN groupadd -r myuser && adduser -r -g myuser myuser
USER myuser
#Install code, configure application, etc...
USER root
COPY run-my-app.sh /usr/local/bin/run-my-app.sh
RUN chown myuser:myuser /usr/local/bin/run-my-app.sh && \
    chmod 744 /usr/local/bin/run-my-app.sh
USER myuser
ENTRYPOINT ["/usr/local/bin/run-my-app.sh"]

Avant la v17.09.0-ce, la référence Dockerfile pour la COPYcommande disait:

Tous les nouveaux fichiers et répertoires sont créés avec un UID et un GID de 0.


Historique Cette fonctionnalité a été suivie à travers plusieurs problèmes GitHub: 6119 , 9943 , 13600 , 27303 , 28499 , problème 30110 .

Le problème 34263 est le problème qui a implémenté la fonctionnalité d'indicateur facultatif et le problème 467 a mis à jour la documentation.


3
C'est frustrant, car chown-ing beaucoup de fichiers est devenu incroyablement lent depuis que l'overlay2 est devenu le pilote de stockage par défaut
— hbogert

1
Oui, en plus, cela crée une grande couche d'image supplémentaire sans raison apparente (dans mon cas:> 300 Mo pour une exécution chownsur 40 Mo de fichiers).
— Dirk

Il y a aussi un avantage à exécuter chown avec la commande COPY qui est la réduction de la taille. Si nous exécutons ces deux commandes séparément (COPY <host_path> <source_path>; chown other_user: other_user), cela crée une couche supplémentaire qui double finalement la taille de l'image.
— abhishek thakur

Cette réponse est une bouée de sauvetage. Merci beaucoup, j'ai résolu un problème que je combattais depuis quelques heures.
— Colby Hill le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.