Kolejne pytanie dotyczące linku symbolicznego Dockera. Mam kilka plików, które chcę skopiować do wszystkich moich kompilacji Dockera. Moja struktura katalogu to:
parent_dir
- common_files
- file.txt
- dir1
- Dockerfile
- symlink -> ../common_files
W powyższym przykładzie chcę, aby plik.txt został skopiowany, gdy dokonuję kompilację w dir1. Ale nie chcę utrzymywać wielu kopii pliku.txt. Za pomocą tego linku, od wersji Dockera 0.10 , kompilacja Dockera musi
Postępuj zgodnie z linkami symbolicznymi w katalogu głównym kontenera, aby uzyskać instrukcje kompilacji DODAJ.
Ale nie otrzymuję takiego pliku ani katalogu, gdy kompiluję z jednym z tych wierszy w moim pliku Dockerfile:
ADD symlink /path/dirname
lub
ADD symlink/file.txt /path/file.txt
opcja montowania NIE rozwiąże tego za mnie (cross platform ...). Próbowałem tar -czh . | docker build -t
bez powodzenia.
Czy istnieje sposób, aby Docker podążał za dowiązaniem symbolicznym i kopiował plik common_files / file.txt do zbudowanego kontenera?
Follow symlinks inside container's root for ADD build instructions.
oznacza, że wewnątrz kontenera są śledzone dowiązania symboliczne. Nie w katalogu kontekstu kompilacji. WADD file.txt /dir/file.txt
katalogudir
może znajdować się dowiązanie symboliczne. Argumenty, które zacytowałem w mojej odpowiedzi, są nadal aktualne, a linki symboliczne nadal nie są używane w najnowszej wersji. Możesz napotkać problemy (dotyczące powtarzalności) podczas przechowywania linków symbolicznych w systemach kontroli wersji, takich jak git . Dlatego proszę odnieść się do tego pytania .Jedną z możliwości jest uruchomienie kompilacji w katalogu nadrzędnym z:
(Lub równoważnie w katalogu podrzędnym)
Plik Dockerfile będzie musiał zostać skonfigurowany do kopiowania / dodawania z odpowiednimi ścieżkami. W zależności od konfiguracji możesz chcieć, aby
.dockerignore
rodzic pomijał rzeczy, których nie chcesz być umieszczany w kontekście.źródło
Jeśli ktoś nadal ma ten problem, to znalazłem bardzo fajne rozwiązanie na superuser.com:
/superuser/842642/how-to-make-a-symlinked-folder-appear-as-a-normal-folder
Zasadniczo sugeruje użycie tar do wyłuskiwania dowiązań symbolicznych i przekazania wyniku do kompilacji dockera:
źródło
zamiast używać linków simlink można rozwiązać problem administracyjnie, po prostu przenosząc pliki z site_available do sites_enabled zamiast kopiować lub tworzyć simlinks
więc twoja konfiguracja witryny będzie w jednej kopii tylko w folderze site_available, jeśli został zatrzymany lub coś takiego, lub w sites_enabled, jeśli powinien zostać użyty
źródło
Wiem, że łamie to przenośność kompilacji dockera, ale możesz użyć twardych linków zamiast symbolicznych:
źródło