J'ai deux applications de fléchettes que je dois dockerize. Ces deux applications utilisent un répertoire source partagé.
Docker empêchant l'ajout de fichiers à partir de dossiers situés en dehors du répertoire contextuel (project/app1
). Je ne peux pas ajouter de fichiers à partir de ../shared
ni de shared
(le lien symbolique à l'intérieur de projects/app1
).
Je cherche un moyen de tromper Docker pour le faire quand même.
Ma structure de projet simplifiée
- projects
- app1
- Dockerfile
- shared (symlink ../shared)
- otherSource
- app2
- Dockerfile
- shared (symlink ../shared)
- otherSource
- shared
- source
Je pourrais déplacer Dockerfile
d'un niveau et exécuter docker build
à partir de là, mais il me faut alors deux fichiers Dockerfiles (pour app1 et app2) dans le même répertoire.
Mon idée actuelle était, si je pouvais en quelque sorte cacher le fait que projects/app1/shared
est un lien symbolique, ce problème serait résolu. J'ai vérifié si je pouvais partager projects
avec Samba et le remonter ailleurs et configurer Samba pour qu'il traite les liens symboliques comme des dossiers normaux, mais je n'ai pas trouvé si cela était supporté (je n'ai pas beaucoup d'expérience avec Samba et je ne l'ai pas encore essayé, j'ai juste cherché un peu ).
Y at-il un autre outil ou astuce qui permettrait cela?
Je préférerais ne pas changer la structure des répertoires car cela causerait d’autres problèmes et éviterait plutôt de copier des fichiers.
Je n'ai pas beaucoup d'expérience avec docker
et je ne peux donc pas promettre que cela fonctionnera, mais vous pouvez choisir de monter le répertoire au lieu de le lier:
$ cd projects/app1
$ mkdir shared
$ Sudo mount -o bind ../shared shared/
Cela attachera ../shared
à ./shared
et devrait être complètement transparent pour le système. Comme expliqué dans man mount
:
La reliure monte.
Depuis Linux 2.4.0, il est possible de remonter une partie de la hiérarchie des fichiers ailleurs. L'appel est:
mount --bind olddir newdir
ou en utilisant cette entrée fstab:
/olddir /newdir none bind
Après cet appel, le même contenu est accessible à deux endroits.