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
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?
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.
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.
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.