J'ai deux applications de fléchettes que je dois dockerize. Ces deux applications utilisent un répertoire source partagé.
Parce que Docker empêche l'ajout de fichiers à partir de dossiers situés en dehors du répertoire contextuel ( project/app1
), je ne peux pas ajouter de fichiers depuis ../shared
et depuis shared
(le lien symbolique à l'intérieur 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 Dockerfile
monter d'un niveau et courir à 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
c'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 n'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.
Ce problème a été soulevé à plusieurs reprises dans la communauté Docker. Cela enfreint fondamentalement l'exigence d'
Dockerfile
être répétable si vous l'exécutez ou si je l'exécute. Donc, je ne m'attendrais pas à cette capacité, comme décrit dans ce ticket: La commande ADD de Dockerfile ne suit pas les liens symboliques sur l'hôte # 1676 .Il faut donc concevoir une approche différente. Si vous regardez ce problème: AJOUTEZ pour supporter les liens symboliques dans l'argument # 6094 , un de nos amis de U & L ( @Patrick aka. Phemmer) fournit une solution de contournement intelligente.
Cela indique
extrait de la page de manuel de tartar
de déréférencer les liens symboliques du répertoire en cours, puis de les diriger vers ladocker build -
commande.la source
cp
commande, pouvez-vous expliquer pourquoi c'est mieux? Je pense aussi que le tuyau est déroutant / trop compliqué. Pourquoi ne pas simplement mettre la commande tar au-dessus de la commande de construction. J'imagine qu'alors vous écraseriez le dir symbolique par le vrai dir./bin/cp ../requirements.txt . && docker build ...
à un Makefile pour construire Docker, c'était plus facile