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:

  1. ai-je raison de comprendre que Docker empêche toute utilisation de mount à l'intérieur de conteneurs?

  2. 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?

17
demandé sur Kryten 2015-01-16 20:45:22

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.

20
répondu Nathaniel Waisbrot 2016-07-20 10:09:01
  1. oui
  2. 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

9
répondu Wolfgang Fahl 2016-10-30 15:47:11

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.

0
répondu Malvineous 2018-08-30 05:55:09