J'ai ce qui suit Dockerfile
:
FROM ubuntu:xenial
RUN useradd -d /home/ubuntu -ms /bin/bash -g root -G sudo -p ubuntu ubuntu
WORKDIR /home/ubuntu
USER ubuntu
VOLUME /opt/myvolume
Que je l'ai construit:
$ docker build -t vol-test .
Sending build context to Docker daemon 2.048kB
Step 1/5 : FROM ubuntu:xenial
---> 0b1edfbffd27
Step 2/5 : RUN useradd -d /home/ubuntu -ms /bin/bash -g root -G sudo -p ubuntu ubuntu
---> Using cache
---> d82e3ecc5fe8
Step 3/5 : WORKDIR /home/ubuntu
---> Using cache
---> ab1db29ee8bf
Step 4/5 : USER ubuntu
---> Using cache
---> 129393a35d9e
Step 5/5 : VOLUME /opt/myvolume
---> Running in 691a4cbd077e
Removing intermediate container 691a4cbd077e
---> 11bc9e9db9d3
Successfully built 11bc9e9db9d3
Successfully tagged vol-test:latest
Cependant, lors de son exécution, le /opt/myvolume
répertoire appartient à root
, et non ubuntu
:
$ docker run vol-test id
uid=1000(ubuntu) gid=0(root) groups=0(root),27(sudo)
$ docker run vol-test find /opt/myvolume -ls
66659 4 drwxr-xr-x 2 root root 4096 Jul 18 23:02 /opt/myvolume
$ docker run -u ubuntu vol-test find /opt/myvolume -ls
66940 4 drwxr-xr-x 2 root root 4096 Jul 18 23:12 /opt/myvolume
car il est créé pendant la course.
Est-il possible de définir ou de changer le propriétaire par défaut du VOLUME
répertoire dans Dockerfile
?
Je l'exécute sur macOS et Linux.
docker
dockerfile
permissions
kenorb
la source
la source
Réponses:
Comme indiqué dans la documentation , l'instruction VOLUME hérite du contenu du répertoire et des autorisations existantes dans le conteneur, vous pouvez donc contourner le problème avec un fichier docker comme celui-ci:
La création du répertoire doit se faire en tant que root (pour pouvoir écrire dans / opt).
la source
VOLUME
fois le répertoire créé: si des étapes de génération modifient les données du volume après leur déclaration, ces modifications seront ignorées.J'ai eu un problème similaire, cela a fonctionné pour moi:
Écrire un fichier Docker avec:
Exécutez ces commandes bash:
Notez que les noms, UID et GID doivent être les mêmes pour l'utilisateur Docker et l'utilisateur hôte. La dernière commande bash indique à l'image Docker que cet utilisateur hôte est le même que l'utilisateur de répertoire de volume partagé Docker, de sorte que le répertoire de fichier devient alors la propriété de "testuser" dans le conteneur Docker.
la source