web-dev-qa-db-fra.com

Docker suit le lien symbolique hors du contexte

Encore une autre question sur le lien symbolique Docker. J'ai un tas de fichiers que je veux copier dans toutes mes versions de Docker. Ma structure de dir est:

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

Dans l'exemple ci-dessus, je veux que le fichier file.txt soit copié lorsque je construis le menu fixe dans dir1. Mais je ne veux pas conserver plusieurs copies de file.txt. Par ce lien, à partir de la version 0.10 de docker , la construction de docker doit

Suivez les liens symboliques à la racine du conteneur pour les instructions de construction ADD.

Mais je n’obtiens aucun fichier ou répertoire de ce type lorsque je construis avec l’une de ces lignes dans mon fichier Docker:

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 (plateforme croisée ...). J'ai essayé tar -czh . | docker build -t sans succès.

Existe-t-il un moyen de forcer Docker à suivre le lien symbolique et à copier le fichier common_files/file.txt dans le conteneur créé?

57
Ravi

Ce 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 répétable. Un lien symbolique sur votre ordinateur n’est pas le même que mon ordinateur et le même fichier Dockerfile produirait deux résultats différents. De plus, avoir des liens symboliques vers/etc/paasswd poserait des problèmes car cela lierait les fichiers de l'hôte et non vos fichiers locaux.

49
h3nrik

Pour ceux qui ont ce problème, veuillez voir ce lien . Personnellement, j'ai opté pour la solution "construire une image de base commune" et cela fonctionne à merveille.

5
Paul Carroll

Une possibilité consiste à exécuter la construction dans le répertoire parent, avec:

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

(Ou de manière équivalente, dans le répertoire enfant)

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

Le fichier Docker doit être configuré pour copier/ajouter avec les chemins appropriés. Selon votre configuration, vous voudrez peut-être un .dockerignore dans le parent pour omettre les choses que vous ne voulez pas mettre dans le contexte.

2
shaunc

au lieu d'utiliser des liens simlinks, il est possible de résoudre le problème de manière administrative en déplaçant simplement les fichiers de sites_available vers sites_enabled au lieu de copier ou de créer des liens sim

votre configuration de site ne sera donc en un exemplaire que dans le dossier site_available s'il s'est arrêté ou quelque chose du genre ou dans sites_enabled s'il doit être utilisé

2
Ilya Kolesnikov