2017-08-07 2 views
1

Impossible de créer un dossier lors de la création d'une image avec un utilisateur non root ajouté au groupe sudoers. Voici mon Dockerfile:Impossible de créer le répertoire. Autorisation refusée à l'intérieur du conteneur docker

FROM ubuntu:16.04 

RUN apt-get update && \ 
    apt-get -y install sudo 

RUN adduser --disabled-password --gecos '' newuser \ 
    && adduser newuser sudo \ 
    && echo '%sudo ALL=(ALL:ALL) ALL' >> /etc/sudoers 

USER newuser 

RUN mkdir -p /newfolder 
WORKDIR /newfolder 

J'obtiens l'erreur: mkdir: cannot create directory '/newfolder': Permission denied

Répondre

4

FileSystems dans un travail de conteneurs Docker comme filesytems en dehors d'un conteneur Docker: vous avez besoin d'autorisations appropriées si vous allez créer des fichiers ou des répertoires. Dans ce cas, vous essayez de créer /newfolder en tant qu'utilisateur non root (car la directive USER modifie l'UID utilisé pour exécuter les commandes qui le suivent). Cela ne fonctionnera pas parce que / appartient à root et a le mode dr-xr-xr-x.

Essayez plutôt:

RUN mkdir -p /newfolder 
RUN chown newuser /newfolder 
USER newuser 
WORKDIR /newfolder 

Cela va créer le répertoire root, puis chown il.

+0

Cela m'a aidé. Je vous remercie. Mais quand je vais dans le conteneur: docker exec -it img/bin/bash puis mkdir newfolder2 Je reçois l'autorisation refusée et il nécessite la commande 'sudo'. Est-il possible de faire des commandes à l'intérieur des conteneurs sans 'sudo'? –

+0

Vous avez utilisé la directive 'USER', donc lorsque vous exécutez une commande dans le conteneur, vous n'êtes pas' root'. Si vous voulez être 'root', vous avez besoin d'un outil d'élévation de privilèges tel que' sudo' ou 'su', ou vous devez redessiner le conteneur pour ne pas utiliser la directive' USER' et considérer plutôt quelque chose comme un script 'ENTRYPOINT' cela utilisera 'sudo' ou similaire aux privilèges * drop * quand il lance votre' CMD'. – larsks