écrire dans des volumes partagés de docker
J'ai un menu fixe avec une application php sur elle
J'ai un volume d'actions, par exemple
/home/me/dev/site <=> /var/www/site
Je peux écrire quelque chose dans mon hôte, il sera synchronisé avec le conteneur
si je me lance
sudo docker exec test touch /var/www/site/test.txt
Il fonctionne
Mais si mon serveur est en train de créer un fichier en tant que www-data
ce n'est pas de travail en raison des droits.
Est-il un moyen de donner accès à mes volumes partagés de www-data
?
Je suis en utilisant boot2docker
- Fait que les utilisateurs ont besoin de la permission d'écriture sur le volume, ou faut-il la possibilité d'exécuter du menu fixe (comme un wrapper pour la gestion du volume)?
- l'utilisateur doit créer des fichiers dans le volume, et pas seulement d'exécuter des fichiers à partir du volume
- Et est-ce que la création et l'exécution de passer par le shell ou avez-vous d'utiliser le
docker exec
de commande pour le faire? - Non, c'est un site web, il peut créer un fichier, lorsque je charge une page, par exemple
- Alors, quelles sont les autorisations en cours (c'est à dire d'utilisateur et de groupe) pour que le dossier que vous écrivez? Si il est à la racine, vous aurez probablement besoin de
chown
à un utilisateur générique, ou de créer un groupe d'utilisateur qui peut contenir à la fois le générique/l'utilisateur root et le www-utilisateur, et d'attribuer à ce groupe en tant que propriétaire du dossier - J'ai par exemple
drwxr-xr-x 1 1000 staff 340 Mar 24 21:52 web
dans mon dossier partagé quand j'executedocker exec test ls -l /var/www/site
Vous devez vous connecter pour publier un commentaire.
Bind(monté) des volumes dans le Panneau sera de maintenir les autorisations sont définies sur
le Panneau d'accueil elle-même. Vous pouvez utiliser cette fonction pour définir les autorisations sur ces
les fichiers et les répertoires avant de les utiliser dans le conteneur.
Un peu de fond;
Autorisations dans Linux sont basés sur l'utilisateur et le groupe id (
'uid'
/'gid'
). Mêmesi vous voir un utilisateur et de groupe nom en tant que propriétaire, ces noms ne sont pas réellement
important dans Linux, ils ne sont là que pour rendre plus facile pour vous de déterminer qui est le propriétaire d'un fichier (ils sont considérés à partir de la
/etc/passwd
fichier).Vous pouvez définir tout
uid
/gid
sur un fichier, un utilisateur n'a pas à existent lors de la configuration de ces autorisations. Par exemple;De la vérification des autorisations (à l'intérieur et à l'extérieur d'un conteneur)
Comme mentionné ci-dessus, le Panneau reste la propriété intellectuelle de l'hôte lors de l'utilisation de
un volume. Cet exemple montre que la propriété et les autorisations dans le volume sont les
même à l'extérieur et à l'intérieur de un conteneur;
Définition des autorisations
Comme l'a expliqué, l'utilisateur ne doit pas exister dans le but de les utiliser, de sorte que même si
nous n'avons pas
www-data
de l'utilisateur sur le Panneau d'accueil, on peut encore définir le bonles autorisations si nous savons que le "uid" et "gid" de l'utilisateur à l'intérieur du conteneur;
Voyons ce que l'uid et le gid du www-data de l'utilisateur est à l'intérieur de le récipient;
D'abord vérifier l'état avant de modifier les autorisations. Cette fois, nous
exécutez la nginx conteneur en tant qu'utilisateur
www-data
;Ensuite, définissez les autorisations sur le répertoire local, et de voir si nous sommes capables d'écrire;
Succès!
33
pourrait être un utilisateur légitime à l'intérieur d'un conteneur, mais pourrait être un "méchant" sur une machine hôte. Aussi, je veux pour tous les fichiers appartiennent à mon compte d'utilisateur sur une machine hôte et non à un utilisateur mystérieux33
.shiftfs
(lwn.net/Articles/687354). Si vous êtes à la bind-montage de fichiers, les fichiers à l'intérieur du conteneur sont les mêmes fichiers que les fichiers à l'extérieur du conteneur, afin de modifier les autorisations sur les fichiers à modifier les autorisations sur l'hôte.docker
groupe ne devrait pas être utilisé car il permet d'accéder au panneau support (l'accès à l'API). Quant à la correspondance du conteneur pour l'exécuter en tant qu'utilisateur actuel; Le scénario décrit ici est le plus utile pour les situations de développement (travail sur des fichiers en dehors du conteneur, mais en donnant l'accès au conteneur), cependant,Ajoutez les lignes suivantes à votre dockerfile et reconstruire votre image
docker exec -it CONTAINER_NAME_OR_ID bash
une Fois dans la coursels -la /var/www
vous allez voir ex.drwxr-xr-x 1 1000 staff 238 Aug 20 20:14 html