Ich habe zwei Dart-Anwendungen, die ich andocken muss. Diese beiden Apps verwenden ein freigegebenes Quellverzeichnis.
Da Docker das Hinzufügen von Dateien aus Ordnern außerhalb des Kontextverzeichnisses verhindert ( project/app1
), kann ich weder Dateien aus ../shared
noch von shared
(dem darin enthaltenen Symlink projects/app1
) hinzufügen .
Ich suche nach einer Möglichkeit, Docker dazu zu verleiten.
Meine vereinfachte Projektstruktur
- projects
- app1
- Dockerfile
- shared (symlink ../shared)
- otherSource
- app2
- Dockerfile
- shared (symlink ../shared)
- otherSource
- shared
- source
Ich könnte Dockerfile
eine Ebene docker build
höher gehen und von dort aus laufen, aber dann brauche ich zwei Dockerfiles (für app1 und app2) im selben Verzeichnis.
Meine aktuelle Idee war, wenn ich die Tatsache, dass projects/app1/shared
es sich um einen Symlink handelt, irgendwie verbergen könnte, wäre dieses Problem gelöst. Ich habe geprüft, ob ich projects
mit Samba teilen und es an einer anderen Stelle erneut einbinden und Samba so konfigurieren kann, dass Symlinks wie normale Ordner behandelt werden. Ich habe jedoch nicht herausgefunden, ob dies unterstützt wird. Ich habe nicht viel Erfahrung mit Samba und habe es noch nicht ausprobiert. .
Gibt es ein anderes Tool oder einen anderen Trick, der dies zulässt?
Ich würde die Verzeichnisstruktur lieber nicht ändern, da dies andere Probleme verursachen würde und auch lieber keine Dateien herumkopieren würde.
Dieses Problem ist in der Docker-Community wiederholt aufgetreten. Es verstößt grundsätzlich gegen die Anforderung, dass
Dockerfile
es wiederholbar sein muss, wenn Sie es ausführen oder ich es ausführen. Daher würde ich diese Fähigkeit nicht erwarten, wie in diesem Ticket beschrieben: Der Befehl Dockerfile ADD folgt keinen Symlinks auf Host # 1676 .Man muss sich also einen anderen Ansatz vorstellen. Wenn Sie sich dieses Problem ansehen: ADD, um Symlinks im Argument # 6094 zu unterstützen, bietet ein Freund von U & L ( @Patrick aka. Phemmer) eine clevere Lösung.
Dadurch werden
Auszug aus der Manpage tartar
die symbolischen Links aus dem aktuellen Verzeichnis dereferenziert und an dendocker build -
Befehl weitergeleitet.quelle
cp
Befehl. Können Sie erklären, warum es besser ist? Ich denke auch, dass die Pfeife verwirrend / zu verworren ist. Warum nicht einfach den Befehl tar über den Befehl build setzen. Ich schätze, dann würden Sie das verknüpfte Verzeichnis mit dem tatsächlichen Verzeichnis überschreiben./bin/cp ../requirements.txt . && docker build ...
ein Makefile hinzugefügt , um den Docker zu