Docker suivre lien symbolique à l'extérieur du contexte

encore une autre question Docker symlink. J'ai un tas de fichiers que je veux copier sur tous mes Docker construit. Ma structure dir est:

parent_dir
    - common_files
        - file.txt
    - dir1
        - Dockerfile  
        - symlink -> ../common_files

dans l'exemple ci-dessus, je veux fichier.TXT à recopier quand je construirai Docker dans dir1. Mais je ne veux pas conserver plusieurs copies du fichier.txt. Par ce lien, à partir de la version 0.10 , Docker construire doit

suivez symlinks à l'intérieur la racine du conteneur pour ajouter des instructions de construction.

mais je reçois pas de tel fichier ou répertoire quand je construis avec l'une ou l'autre de ces lignes dans mon fichier Dockerfile:

ADD symlink /path/dirname ou ADD symlink/file.txt /path/file.txt

L'option de montage

ne résoudra pas le problème pour moi (cross platform...). J'ai essayé tar -czh . | docker build -t sans succès.

y a-t-il un moyen de faire suivre le lien symbolique à Docker et de copier common_files/fichier.txt dans le container construit?

35
demandé sur Ravi 2015-08-07 18:51:40

3 réponses

cela n'est pas possible et ne sera pas mis en œuvre. S'il vous plaît jeter un oeil à la discussion sur GitHub numéro 1676 :

nous ne permettons pas cela parce que ce n'est pas reproductible. Un lien symbolique sur votre machine n'est pas le même que ma machine et le même fichier Dockerfile produirait deux résultats différents. Aussi avoir des liens symboliques vers/etc / paasswd causerait des problèmes car cela lierait les fichiers hôtes et pas vos fichiers locaux.

35
répondu h3nrik 2015-08-07 19:25:19

pour toute autre personne ayant ce problème, s'il vous plaît voir ce lien . Personnellement j'ai opté pour la solution" construire une image de base commune " et cela fonctionne brillamment.

2
répondu Paul Carroll 2018-01-23 06:41:46

une possibilité est d'exécuter la compilation dans le répertoire parent, avec:

$ docker build [tags...] -f dir1/Dockerfile .

(ou l'équivalent, dans le répertoire enfant,)

$ docker build  [tags...] -f Dockerfile ..

le fichier Dockerfile devra être configuré pour copier/ajouter avec les chemins appropriés. En fonction de votre configuration, vous pourriez vouloir un .dockerignore dans le parent de des choses que vous ne voulez pas mettre dans le contexte.

0
répondu shaunc 2018-06-24 20:21:16