web-dev-qa-db-fra.com

Comment faire apparaître un dossier avec un lien symbolique

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.

36
zoechi

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.

32
terdon