In meiner Dockerfile habe ich diese zwei Zeilen:
ADD /ansible/inventory /etc/ansible/hosts
ADD /ansible/. /ansiblerepo
Die erste Zeile funktioniert, da ich den Container ausführen und sehen kann, dass meine hosts-Datei mit allen ips aus meiner Inventardatei gefüllt wurde.
Die zweite Zeile scheint jedoch nicht zu funktionieren. Ich versuche nur, alle Dateien / Unterverzeichnisse von ansible zu kopieren und in das Verzeichnis ansiblerepo im neuen Container zu kopieren.
Es gibt keine Fehler beim Erstellen des Abbilds, aber ansiblerepo ist nur ein leeres Verzeichnis, und nichts wurde darauf kopiert. Ich vermute, ich vermisse einfach einen Backslash oder so.
Antworten:
1 für die Antwort № 1Nachlauf entfernen /.
aus dem Quellverzeichnis sollte das beheben ADD
Befehl.
In einem verwandten Hinweis, Best Practices für Docker schlagen vor zu verwenden COPY
Über ADD
Wenn Sie die URL-Download-Funktion nicht benötigen.
1 für die Antwort № 2
Docker ADD
und COPY
Befehle funktionieren relativ zum Build direkt und nur für Dateien in diesem Verzeichnis, die nicht mit a ausgeschlossen wurden .dockerignore
Datei. Der Grund dafür ist, dass Builds tatsächlich auf dem Docker-Host ausgeführt werden, bei dem es sich um einen Remote-Computer handeln kann. Der erste Schritt von a docker build .
ist das Packen aller Dateien im Verzeichnis (in diesem Fall) .
) und schicke sie an den Host, um den Build auszuführen. Alle absoluten Pfade, die Sie angeben, werden als relativ zum Build-Verzeichnis interpretiert, und alle Informationen, die Sie an den Server senden, werden als fehlende Datei interpretiert.
Die Lösung besteht darin, / ansible in Ihr Build-Verzeichnis zu kopieren (normalerweise den gleichen Ordner wie Ihre Docker-Datei).