Noch eine Docker-Symlink-Frage. Ich habe eine Reihe von Dateien, die ich in alle meine Docker-Builds kopieren möchte. Meine dir Struktur ist:
parent_dir
- common_files
- file.txt
- dir1
- Dockerfile
- symlink -> ../common_files
Im obigen Beispiel möchte ich, dass file.txt kopiert wird, wenn ich Docker in dir1 erstelle. Ich möchte jedoch nicht mehrere Kopien von file.txt verwalten. Gemäß diesem Link muss ab Docker-Version 0.10 der Docker-Build erstellt werden
Befolgen Sie die Symlinks im Stammverzeichnis des Containers, um Anweisungen zum Hinzufügen hinzuzufügen.
Ich erhalte jedoch keine solche Datei oder kein solches Verzeichnis, wenn ich mit einer dieser Zeilen in meiner Docker- Datei erstelle:
ADD symlink /path/dirname
oder
ADD symlink/file.txt /path/file.txt
Die Mount-Option löst es NICHT für mich (plattformübergreifend ...). Ich habe es tar -czh . | docker build -t
ohne Erfolg versucht .
Gibt es eine Möglichkeit, Docker dazu zu bringen, dem Symlink zu folgen und die Datei common_files / file.txt in den erstellten Container zu kopieren?
Follow symlinks inside container's root for ADD build instructions.
bedeutet, dass innerhalb des Containers Symlinks befolgt werden. Nicht im Build-Kontextverzeichnis. ImADD file.txt /dir/file.txt
Verzeichnisdir
könnte sich ein Symlink befinden. Die Argumente, die ich in meiner Antwort zitiert habe, sind weiterhin gültig und Symlinks werden in der neuesten Version immer noch nicht befolgt. Beim Speichern von Symlinks in Revisionskontrollsystemen wie git können Probleme (hinsichtlich der Wiederholbarkeit) auftreten . Bitte beziehen Sie sich daher auf diese Frage .Eine Möglichkeit besteht darin, den Build im übergeordneten Verzeichnis auszuführen, mit:
(Oder gleichwertig im untergeordneten Verzeichnis)
Die Docker-Datei muss so konfiguriert sein, dass sie mit den entsprechenden Pfaden kopiert / hinzugefügt werden kann. Abhängig von Ihrem Setup möchten Sie möglicherweise, dass ein
.dockerignore
übergeordnetes Element Dinge auslässt, die nicht in den Kontext gestellt werden sollen.quelle
Wenn noch jemand dieses Problem hat, habe ich auf superuser.com eine sehr schöne Lösung gefunden:
/superuser/842642/how-to-make-a-symlinked-folder-appear-as-a-normal-folder
Grundsätzlich wird empfohlen, tar zu verwenden, um die Symlinks zu dereferenzieren und das Ergebnis in den Docker-Build einzuspeisen:
quelle
Anstatt Simlinks zu verwenden, können Sie das Problem administrativ lösen, indem Sie einfach Dateien von sites_available nach sites_enabled verschieben, anstatt Simlinks zu kopieren oder zu erstellen
Daher befindet sich Ihre Site-Konfiguration nur in einer Kopie im Ordner site_available, wenn sie gestoppt wurde, oder in sites_enabled, wenn sie verwendet werden sollte
quelle
Ich weiß, dass es die Portabilität des Docker-Builds beeinträchtigt, aber Sie können feste Links anstelle von symbolischen verwenden:
quelle