Dockerignore: Ignorieren Sie alles außer einer Datei und der Docker-Datei


89

Die Hauptabsicht war es also, eine Fettglasanwendung anzudocken und in Elasticbeanstalk zu legen. Das Problem liegt im Kontext. Es ist ein bisschen dumm, so viel Kontext in Docker hinzuzufügen, wenn ich nur eine einzige JAR-Datei brauche.

Ich habe mit der .dockerignore-Datei herumgespielt, aber ich bin verloren. Ich habe versucht, die Gitignore-Negation zu verwenden, aber es funktioniert nicht.

*
!Dockerfile
*/
!target/
target/*
!target/*.jar

Es gibt auch das Ding mit Regex, aber es scheint, dass komplizierter Regex nicht unterstützt wird.

^((?!Dockerfile).)*$

Ich habe auch versucht, im Stackoverflow zu suchen, und diese beiden sind alles, was ich gefunden habe:

Diese Frage ähnelt vielleicht der zweiten, aber ich denke, es ist ein kleiner Unterschied, da ich hier nur eine einzelne Datei in den Kontext aufnehmen möchte.

Jede Hilfe wird geschätzt.


Ausrufezeichen für Ordner funktioniert bei mir!
Ivan Aracki

Antworten:


127

Wenn Sie alles außer einigen Verzeichnissen oder Dateien ignorieren und auch einige unnötige Dateien in diesen zulässigen Verzeichnissen ignorieren müssen, können Sie die folgende .dockerignoreDatei verwenden:

# Ignore everything
**

# Allow files and directories
!/file.txt
!/src/**

# Ignore unnecessary files inside allowed directories
# This should go after the allowed directories
**/*~
**/*.log
**/.DS_Store
**/Thumbs.db

8
Laut Docker-Dokumentation sollte es ausreichen, nur *in die erste Zeile zu setzen (anstelle von **). Zitat: "Möglicherweise möchten Sie angeben, welche Dateien in den Kontext aufgenommen werden sollen, anstatt welche ausgeschlossen werden sollen. Um dies zu erreichen, geben Sie *als erstes Muster an, gefolgt von einem oder mehreren !Ausnahmemustern."
Johnny Thunderman

31

Aus der Dockerfile-Referenz :

Neben den Dateipfad.Match-Regeln von Go unterstützt Docker auch eine spezielle Platzhalterzeichenfolge **, die mit einer beliebigen Anzahl von Verzeichnissen (einschließlich Null) übereinstimmt. Zum Beispiel schließt ** / *. Go alle Dateien aus, die mit .go enden und in allen Verzeichnissen gefunden werden, einschließlich des Stammverzeichnisses des Build-Kontexts.

Eine Zeile mit einfach ** ignoriert also alles im selben Verzeichnis wie die Docker-Datei.

Wie erwartet kann der Ausruf dann verwendet werden, um auf alle Dateien zu verweisen, die Sie an den Docker-Daemon senden möchten.


3
Es ist äußerst wichtig, dass das **an den Anfang der Datei geht, da sonst die Ausschlüsse ignoriert werden. Docker verwendet die letzte übereinstimmende Regel als "endgültige" Regel. Wenn dies die letzte ist, stimmt **sie mit allem überein.
Tedivm

3
Fügen Sie also **in der ersten Zeile und !fooin der nächsten Zeile hinzu, ob dies foodie einzige Datei ist, die Sie einschließen möchten.
Saca

9

Das mag seltsam klingen, aber wenn Sie nur eine einzige JAR-Datei benötigen, können Sie in Ihrem Build-System einen "Docker" -Ordner erstellen, der Ihre Docker-Datei enthält. Wenn Sie Ihre Builds ausführen, lassen Sie die Build-Skripte die einzelne JAR-Datei in "Docker" kopieren, führen Sie dann den Docker-Image-Build (aus dem Ordner "Docker") aus und senden Sie ihn anschließend an Ihre Docker-Registrierung.


2
Hallo, es klingt überhaupt nicht seltsam. Ich dachte, es sei eine allgemeine Praxis, aber ich suchte nach einer Möglichkeit, dies mit dem .dockerignore zu tun, wenn dies möglich ist. Außerdem mag ich mvn xml nicht wirklich :)
Rowanto

Sie können beide Ansätze kombinieren, indem Sie die Docker-Datei in ein Unterverzeichnis stellen und .dockerignore verwenden. Laut den Unterlagen ist es sowieso gut, dies zu tun
Jonathan Lee

Docker-Dokumentation : In den meisten Fällen ist es am besten, mit einem leeren Verzeichnis als Kontext zu beginnen und Ihre Docker-Datei in diesem Verzeichnis zu belassen. Fügen Sie nur die Dateien hinzu, die zum Erstellen der Docker-Datei erforderlich sind. Warnung: Verwenden Sie Ihr Stammverzeichnis / nicht als PFAD, da der Build den gesamten Inhalt Ihrer Festplatte auf den Docker-Dämon überträgt.
Jonathan Lee
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.