Modifier les autorisations de fichier dans le dossier monté à l'intérieur de conteneur docker sur l'Hôte Windows
Avertissement/Edit 2
Quelques années plus tard, pour tout le monde la lecture de cette question - Si vous êtes sous Windows et que vous voulez utiliser docker avec linux containers, je recommande fortement de ne pas utiliser docker pour windows à tous et au lieu de départ de l'ensemble de support de l'environnement à l'intérieur d'une VM tout à fait. Cette Ext3, NTFS question de volonté de casser le cou sur tant de niveaux différents, que l'installation de docker-machine pourrait même ne pas être en vaut la peine.
Edit:
Je suis en utilisant docker-machine
qui commence un boot2docker exemple à l'intérieur d'une VM Virtualbox avec un dossier partagé sur /c/Utilisateurs à partir de laquelle vous pouvez monter des volumes dans vos contenants. Les autorisations de ce volume sont celles que la question est à propos. Les machines virtuelles sont stockées dans /c/Utilisateurs/tom/.menu fixe/
J'ai choisi d'utiliser le docker-machine
Virtualbox flux de travail sur Hyper-V, car j'ai besoin de VBox dans mon flux de travail quotidien et exécutant Hyper-V et Virtualbox sur un système n'est pas possible en raison de incompabilities entre les différents Hyperviseurs.
Question d'origine
Je suis en train d'essayer de configurer PHPMyAdmin dans un récipient sur windows mais je ne peux pas modifier les autorisations de l' config.inc.php
fichier.
J'ai trouvé: Ne peut pas appeler chown à l'intérieur de conteneur Docker (menu fixe pour Windows) et pensé que cela pourrait être quelque peu liés, mais il semble s'appliquent uniquement à MongoDB.
C'est mon menu fixe-composer.yml
version: "3"
services:
pma:
image: (secrect company registry)/phpmyadmin
ports:
- 9090:80
volumes:
- /c/Users/tom/projects/myproject/data/var/www/public/config.inc.php:/var/www/public/config.inc.php
maintenant, quand je docker exec -it [container] bash
et le changement dans le répertoire monté, j'essaie de le lancer chmod
sur le config.inc.php
mais pour une raison quelconque, il ne parvient pas silencieusement.
root@22a4bag43245: ls -la config.inc.php
-rw------- 1 root root 0 Aug 11 15:11 config.inc.php
root@22a4bag43245: chmod 655 config.inc.php
root@22a4bag43245: ls -la config.inc.php
-rw------- 1 root root 0 Aug 11 15:11 config.inc.php
Compte tenu de la liés réponse, j'ai pensé que je pourrais juste déplacer le volume de la sortie de mon Userhome mais alors vbox ne pas monter le dossier.
Comment puis-je changer les permissions du fichier de /var/www/public/config.inc.php
constamment?
/c/Users/tom/projects/myproject/data/var/www/public/config.inc.php
un fichier ou un dossier?config.inc.php est un fichier
mais il n'importe pas de savoir si je fais le montage des dossiers ou des fichiers comme des volumes, je ne suis pas en mesure de modifier les autorisations
trouvé un autre lien sur le même sujet: forums.docker.com/t/...
Vous pourriez essayer de monter le répertoire parent au lieu de l'unique fichier. Modification des autorisations sur un mount point pourrait être quelque chose de spécial (dis: impossible).
OriginalL'auteur Tom M | 2017-08-11
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème de ne pas être en mesure de modifier la propriété, même après l'utilisation de
chown
. Et comme je l'ai recherches, c'était à cause de volumes NTFS étant montés à l'intérieur du système de fichiers ext. J'ai donc utilisé une autre approche.Les volumes internes de docker sont gratuits à partir de ces problèmes. Donc vous pouvez monter votre fichier interne docker volume, puis de créer un dur lien symbolique vers ce fichier dans votre dossier local où vous voulez:
De cette façon, vous pouvez avoir vos fichiers à l'endroit voulu, à l'intérieur de docker et sans aucune autorisation des questions, et vous serez en mesure de modifier le contenu du fichier comme dans le volume normal de montage en raison de lien symbolique.
Ici est un travail de mise en œuvre de ce processus, qui se monte et les liens d'un répertoire. Dans le cas où vous voulez en connaître les détails, voir
possible fix
section dans question.MODIFIER
Étapes de mise en œuvre de cette approche:
named volumes
).Avant de faire hardlink, assurez-vous que les volumes et le fichier en question, y sont présents. Pour ce faire, vous devriez avoir exécuté votre conteneur au moins une fois avant ou si vous souhaitez automatiser la création du fichier, vous pouvez inclure un menu fixe qui crée les fichiers nécessaires et les sorties.
docker run --rm -itd \
-v "<Project_name>_<volume_name>:/absolute/path" \
<image> bash -c "touch /absolute/path/<my_file>"
Ce docker run sera de créer des volumes et des fichiers nécessaires. Ici,
container
est mon nom de projet, par défaut, c'est le nom du dossier dans lequel le projet est présent et<volume_name>
est le même que celui que nous voulons utiliser dans notre récipient d'origine.<image>
peut être le même que celui qui est déjà utilisé dans votre contenant d'origine.docker volume inspect --format '{{ .Mountpoint }}' <project_name>_<volume_name>/<my_file>
. Les utilisateurs de Linux peuvent utiliserln
dans le terminal et les utilisateurs de windows peuvent utilisermklink
dans l'invite de commande.À l'étape 3, nous n'avons pas utilisé
/absolute/path
depuis le<volume_name>
se réfère à cet endroit déjà, et nous avons juste besoin de consulter le fichier.attendez, je ne peux pas hardlink sur mon hôte, depuis OS c'est windows. Ai-je mal vous comprendre?
Ce fut pour le système d'exploitation linux, pour windows, vous pouvez utiliser
mklink
. Plus de détails iciJe ne suis pas en utilisant Hyper-V, mais virtualbox pilote et
docker-machine
. Est-il encore une chance de le faire fonctionner d'une certaine manière?Un lien en dur ne peut pas traverser le fichier des limites de système de sorte à ne pas travailler pour un fichier partagé à partir de Windows > Linux
OriginalL'auteur Ayushya
Essayez l'une des opérations suivantes:
Si vous pouvez reconstruire l'image de l'image:
image: (secrect company registry)/docker-stretchimal-apache2-php7-pma
puis à l'intérieur du panneau de fichier, ajoutez la ligne suivanteUSER root
RUN chmod 655 config.inc.php
Ensuite, vous pouvez reconstruire l'image et de l'insérer dans le registre, et ce que vous faisiez devrait fonctionner. Ce doit être votre solution préférée, que vous ne voulez pas être de modifier manuellement les autorisations à chaque fois que vous démarrez un nouveau conteneur
Essayer de exec à l'aide de la racine de l'utilisateur explicitement
docker exec -it -u root [container] bash
chmod
laconfic.inc.php
à l'intérieur l'image qui sera remplacé par mon monté confic.inc.php. 2. ne fonctionne pas. Même si je-u root
, les autorisations ne seront toujours pas changer quand jechmod
.pouvez-vous fournir le panneau de fichier pour l'image?
non, désolé. Mais il ne fonctionne pas avec les images de l'agent de registre, de sorte que je doute que l'image est en faute
Dockerfile qui est exécuté (construit) avant que le volume est monté, vous ne pouvez pas modifier les autorisations dans le volume monté de cette façon.
OriginalL'auteur yamenk