Mount SMB / CIFS partager dans un conteneur Docker
j'ai une application web dans un conteneur Docker. Cette application a besoin d'accéder à certains fichiers sur notre serveur de fichiers d'Entreprise (Windows Server avec un contrôleur de domaine Active Directory). Les fichiers auxquels j'essaie d'Accéder sont des fichiers image créés pour nos clients et l'application web les affiche dans le portefeuille du client.
sur ma machine de développement j'ai les dossiers appropriés montés via des entrées dans /etc/fstab
et les points de montage de l'hôte sont montés Conteneur Docker via --volume
argument. Cela fonctionne parfaitement.
maintenant j'essaie de mettre en place un conteneur de production qui sera exécuté sur un serveur différent et qui ne dépend pas du fait que le partage CIFS soit monté sur l'hôte. J'ai donc essayé d'ajouter les entrées appropriées à l' /etc/fstab
le fichier dans le conteneur et de montage avec mount -a
. J'obtiens mount error(13): Permission denied
.
Un peu de recherche en ligne m'a conduit à cet article sur le Panneau de sécurité. Si je suis en train de lire ce correctement, il semble que Docker nie explicitement la possibilité de monter des systèmes de fichiers dans un conteneur. J'ai essayé de monter les actions en lecture seule, mais cela (sans surprise) a également échoué.
Donc, j'ai deux questions:
ai-je raison de comprendre que Docker empêche toute utilisation de
mount
à l'intérieur de conteneurs?quelqu'un Peut-il penser à une autre façon d'accomplir ceci sans montage d'une part CIFS sur l'hôte et ensuite monter le dossier hôte dans le conteneur Docker?
3 réponses
Oui, Docker vous empêche de monter un volume à distance à l'intérieur du conteneur comme mesure de sécurité. Si vous faites confiance à vos images et les personnes qui les dirigent, alors vous pouvez utiliser le --privileged
drapeau avec docker run
pour désactiver ces mesures de sécurité.
en Outre, vous pouvez combiner --cap-add
et --cap-drop
ne donner au conteneur que les capacités dont il a réellement besoin. (voir documentation)SYS_ADMIN
capacité est celui qui accorde des privilèges de montage.
- oui
- il y a un problème clos mont.cifs dans un conteneur
https://github.com/docker/docker/issues/22197
selon laquelle ajouter
--cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH
pour les options d'exécution fera mount-t cifs opérationnel.
je l'ai essayé et:
mount -t cifs //<host>/<path> /<localpath> -o user=<user>,password=<user>
dans le conteneur fonctionne alors
vous pourriez utiliser le smbclient
commande (faisant partie du paquet Samba) pour accéder au serveur SMB/CIFS depuis le conteneur Docker sans le monter, de la même manière que vous pouvez utiliser curl
pour télécharger un fichier.
il y a une question sur StackExchange Unix qui traite de cette situation, mais en bref:
smbclient //server/share -c 'cd /path/to/file; put myfile'
pour plusieurs fichiers, il y a le -T
option qui peut créer ou d'extraire .tar
archives, cependant il semble que ça serait être un processus en deux étapes (un pour créer le .tar
et puis une autre pour l'extraire localement). Je ne suis pas sûr que vous puissiez utiliser un tuyau pour le faire en une seule étape.