J'ai une image de conteneur docker OpenSuse 42.3 que j'ai créée avec un seul utilisateur, que nous appellerons 'streamuser'. Je voudrais que ce soit l'utilisateur qui est actif chaque fois que quelqu'un crée un conteneur à partir de mon image. J'ai monté le répertoire personnel de l'hôte dans le répertoire home de streamuser. Le problème que j'ai, c'est que si je lance le conteneur Docker sur un hôte Linux, streamusercan n'écrit rien dans les répertoires de l'hôte. Cela est dû au fait que streamuser ne partage pas les mêmes UID et GID que l'hôte. Existe-t-il un moyen propre de résoudre ce problème qui m'évite de définir le compte d'utilisateur par défaut dans l'image sur le compte root? Si je me connecte en tant que root dans le conteneur, je peux écrire sur l'hôte Linux, mais cela n'est pas souhaitable.Autoriser un utilisateur non root à écrire sur l'hôte Linux dans Docker
Mon appel docker est:
docker run -it -d --name ${containerName} --user="streamuser" \
--workdir="/home/streamuser" --volume="${home}:/home/streamuser" \
${imageName} /bin/bash -rcfile /opt/Codebase/image_env_setup_v206.sh
Je l'ai vu une solution où quelqu'un a utilisé l'option --volume comme passé le passwd hôte, sudoers, fichiers etc jusqu'à conteneur. Je n'aime pas cette option car elle écrase mon environnement créé dans le conteneur, et il me semble que c'est une solution bidouille.
Mon dockerfile est:
FROM opensuse:42.3
RUN zypper update -y && \
zypper install -y \
sudo \
vim \
gcc-fortran \
infinipath-psm-devel \
openmpi \
openmpi-devel \
openmpi-libs \
hdf5-openmpi \
blas-devel \
blas-devel-static \
lapack-devel \
which
RUN echo "root:streamuser_2017" | chpasswd
RUN useradd -m streamuser
RUN passwd -d streamuser
CMD /bin/bash
RUN mkdir -p -m0755 \
/opt/codeA/lib \
/opt/codeA/bin \
/opt/codeB/lib \
/opt/codeC/lib \
/opt/codeC/bin \
/opt/petsc/lib
USER streamuser
WORKDIR /home/streamuser
RUN source $HOME/.bashrc
COPY ./Docker/critical_dependencies/codeA_lib/* /opt/codeA/lib/
COPY ./Docker/critical_dependencies/codeA_bin/* /opt/codeA/bin/
COPY ./Docker/critical_dependencies/codeB_lib/* /opt/codeB/lib/
COPY ./Docker/critical_dependencies/petsc_lib/* /opt/petsc/lib/
COPY ./lib/* /opt/codeC/lib/
COPY ./bin/* /opt/codeC/bin/
COPY ./Docker/image_env_setup_v206.sh /opt/codeC
RUN source /opt/codeC/image_env_setup_v206.sh
Que diriez-vous de changer le Gid de streamuser à l'intérieur du conteneur pour appartenir à un groupe racine dans le conteneur? – Ayushya
@Ayushya J'avais pensé à faire cela, mais je crois que c'est généralement d'ajouter des utilisateurs au groupe racine. – wandadars
Vrai, j'ai proposé cette solution, mais même je suis d'accord avec "l'utilisateur ne devrait pas être ajouté au groupe racine" – Ayushya