GNU/Linux >> Tutoriels Linux >  >> Linux

Impossible d'exposer un volume basé sur un fusible à un conteneur Docker

Je ne parviens pas à reproduire votre problème localement. Si j'essaie d'exposer un système de fichiers encfs en tant que volume Docker, j'obtiens une erreur en essayant de démarrer le conteneur :

FATA[0003] Error response from daemon: Cannot start container <cid>:
setup mount namespace stat /visible: permission denied 

Il est donc possible que quelque chose de différent se passe. En tout cas, c'est ce qui a résolu mon problème :

Par défaut, FUSE permet uniquement à l'utilisateur qui a monté un système de fichiers d'avoir accès à ce système de fichiers. Lorsque vous exécutez un conteneur Docker, ce conteneur s'exécute initialement en tant que root .

Vous pouvez utiliser le allow_root ou allow_other options de montage lorsque vous montez le système de fichiers FUSE. Par exemple :

$ encfs -o allow_root /encrypted /other

Ici, allow_root permettra à l'utilisateur root d'avoir accès au point de montage, tandis que allow_other permettra à quiconque d'avoir accès au point de montage (à condition que les autorisations Unix sur le répertoire leur permettent d'accéder).

Si je monte par le système de fichiers encfs en utilisant allow_root , je peux ensuite exposer ce système de fichiers en tant que volume Docker et le contenu de ce système de fichiers est correctement visible depuis l'intérieur du conteneur.


C'est certainement parce que vous avez démarré le démon Docker avant que l'hôte ne monte le point de montage. Dans ce cas, l'inode du nom de répertoire pointe toujours vers le disque local de l'hôte :

ls -i /mounts/
1048579 s3-data-mnt

alors si vous montez en utilisant un démon fuse comme s3fs :

/usr/local/bin/s3fs -o rw -o allow_other -o iam_role=ecsInstanceRole /mounts/s3-data-mnt
ls -i
1 s3-data-mnt

Je suppose que docker effectue une mise en cache bootstrap des noms de répertoire vers les inodes (quelqu'un qui a plus de connaissances à ce sujet que ne peut remplir ce blanc).

Votre commentaire est correct. Si vous redémarrez simplement Docker une fois le montage terminé, votre volume sera correctement partagé de l'hôte vers vos conteneurs. (Ou vous pouvez simplement retarder le démarrage de docker jusqu'à ce que toutes vos montures aient fini de monter)

Ce qui est intéressant (mais qui est complet depuis pour moi maintenant), c'est qu'en quittant le conteneur et en démontant le point de montage sur l'hôte, toutes mes écritures de l'intérieur du conteneur vers le volume partagé sont apparues comme par magie (elles étaient stockées à l'inode sur le disque local de la machine hôte) :

[[email protected] s3-data-mnt]# echo foo > bar
[[email protected] s3-data-mnt]# ls /mounts/s3-data-mnt
total 6
1 drwxrwxrwx  1 root root    0 Jan  1  1970 .
4 dr-xr-xr-x 28 root root 4096 Sep 16 17:06 ..
1 -rw-r--r--  1 root root    4 Sep 16 17:11 bar
[[email protected] s3-data-mnt]# docker run -ti -v /mounts/s3-data-mnt:/s3-data busybox /bin/bash
[email protected]:/mounts/s3-data# ls -als
total 8
4 drwxr-xr-x  3 root root 4096 Sep 16 16:05 .
4 drwxr-xr-x 12 root root 4096 Sep 16 16:45 ..
[email protected]:/s3-data# echo baz > beef
[email protected]:/s3-data# ls -als
total 9
4 drwxr-xr-x  3 root root 4096 Sep 16 16:05 .
4 drwxr-xr-x 12 root root 4096 Sep 16 16:45 ..
1 -rw-r--r--  1 root root    4 Sep 16 17:11 beef
[email protected]:/s3-data# exit
exit
[[email protected] s3-data-mnt]# ls /mounts/s3-data-mnt
total 6
1 drwxrwxrwx  1 root root    0 Jan  1  1970 .
4 dr-xr-xr-x 28 root root 4096 Sep 16 17:06 ..
1 -rw-r--r--  1 root root    4 Sep 16 17:11 bar
[[email protected] /]# umount -l s3-data-mnt
[[email protected] /]# ls -als
[[email protected] /]# ls -als /s3-stn-jira-data-mnt/
total 8
4 drwxr-xr-x  2 root root 4096 Sep 16 17:28 .
4 dr-xr-xr-x 28 root root 4096 Sep 16 17:06 ..
1 -rw-r--r--  1 root root    4 Sep 16 17:11 bar

Linux
  1. Comment quitter un conteneur Docker

  2. Impossible de supprimer un répertoire sous Unix

  3. Transférer le port hôte vers le conteneur Docker

  4. Explorer le système de fichiers du conteneur Docker

  5. Comment puis-je obtenir des informations sur le conteneur Docker Linux à partir du conteneur lui-même ?

BTFS - Un système de fichiers Bittorrent basé sur FUSE

Comment l'utilisateur peut-il monter un conteneur de fichiers crypté dans Veracrypt ?

Comment ajouter un volume à un conteneur Docker existant

Comment accéder aux fichiers en dehors d'un conteneur Docker

Comment se connecter en SSH à un conteneur Docker

Comment gérer les conteneurs Docker