Encore une autre question de lien symbolique Docker. J'ai un tas de fichiers que je souhaite copier dans toutes mes versions de Docker. Ma structure dir est:
parent_dir
- common_files
- file.txt
- dir1
- Dockerfile
- symlink -> ../common_files
Dans l'exemple ci-dessus, je veux que file.txt soit copié lorsque je crée un docker dans dir1. Mais je ne veux pas conserver plusieurs copies de file.txt. Selon ce lien, à partir de la version 0.10 de docker, la construction de docker doit
Suivez les liens symboliques à l'intérieur de 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 Dockerfile:
ADD symlink /path/dirname
ou
ADD symlink/file.txt /path/file.txt
L'option de montage ne le résoudra PAS pour moi (multiplateforme ...). J'ai essayé tar -czh . | docker build -t
sans succès.
Existe-t-il un moyen de faire en sorte que Docker suive le lien symbolique et copie le common_files / file.txt dans le conteneur construit?
Follow symlinks inside container's root for ADD build instructions.
signifie qu'à l' intérieur du conteneur, les liens symboliques sont suivis. Pas dans le répertoire de contexte de construction. DansADD file.txt /dir/file.txt
le répertoiredir
pourrait être un lien symbolique. Les arguments que j'ai cités dans ma réponse sont toujours valides et les liens symboliques ne sont toujours pas suivis dans la dernière version. Vous pouvez rencontrer des problèmes (concernant la répétabilité) lorsque vous stockez des liens symboliques dans des systèmes de contrôle de révision comme git . Veuillez donc vous référer à cette question .Une possibilité est d'exécuter la construction dans le répertoire parent, avec:
(Ou de manière équivalente, dans le répertoire enfant,)
Le Dockerfile devra être configuré pour faire des copies / ajouts avec les chemins appropriés. Selon votre configuration, vous voudrez peut-être qu'un
.dockerignore
parent laisse de côté les choses que vous ne voulez pas mettre dans le contexte.la source
Si quelqu'un a toujours ce problème, j'ai trouvé une très bonne solution sur superuser.com:
/superuser/842642/how-to-make-a-symlinked-folder-appear-as-a-normal-folder
Il suggère essentiellement d'utiliser tar pour déréférencer les liens symboliques et introduire le résultat dans la construction du docker:
la source
au lieu d'utiliser simlinks, il est possible de résoudre le problème administrativement en déplaçant simplement les fichiers de sites_available vers sites_enabled au lieu de copier ou de créer des simlinks
donc la configuration de votre site sera en une seule copie dans le dossier site_available s'il s'est arrêté ou quelque chose ou dans sites_enabled s'il doit être utilisé
la source
Je sais que cela rompt la portabilité de la construction de docker, mais vous pouvez utiliser des liens durs au lieu de symboliques:
la source