J'utilise Docker (1.3.1) pour construire des RPM à l'intérieur d'un conteneur:
docker run -v /home/matt/build:/build build-rpm /build/build-pkg.sh
Cela fonctionne très bien (mon utilisateur est dans le groupe docker
, donc je n'ai pas besoin de Sudo) et supprime un .rpm
fichier dans le répertoire courant. Le problème est que le fichier est créé comme appartenant à root.
Comment puis-je l'organiser pour que le fichier soit créé et appartient au même utilisateur que celui avec lequel j'exécute Docker?
Vous pouvez essayer de créer (dans le Dockerfile d'une image personnalisée) un utilisateur et le définir comme celui utilisé par le conteneur
RUN adduser --system --group --Shell /bin/sh auser \
&& mkdir /home/auser/bin
USER auser
Vérifiez ensuite si un docker run -v /home/matt/build:/build build-rpm
monte le dossier partagé dans/build en tant que auser
.
Une autre option mentionnée dans problème 2259 :
Si vous
chown
le volume (côté hôte) avant de le monter par liaison, cela fonctionnera.
Dans ce cas, vous pourriez faire:
mkdir /tmp/www
chown 101:101 /tmp/www
docker run -v /tmp/www:/var/www ubuntu stat -c "%U %G" /var/www
(En admettant que
101:101
est leUID:GID
duwww-data
utilisateur dans votre conteneur.)
Docker s'exécute en tant que root et n'a aucune idée de ce que votre utilisateur est dans son environnement virtuel (même si vous êtes dans le groupe sudoers). Mais vous pouvez créer un utilisateur non root tout en créant votre image docker qui peut être appelée comme vous le souhaitez.
# create a non-root user named tester,
# give them the password "tester" put them in the Sudo group
RUN useradd -d /home/tester -m -s /bin/bash tester && echo "tester:tester" | chpasswd && adduser tester Sudo
# start working in the "tester" home directory
WORKDIR /home/tester
COPY ./src
# Make the files owned by tester
RUN chown -R tester:tester /home/tester
# Switch to your new user in the docker image
USER tester