Dockerignore:ファイルとDockerfileを除くすべてを無視します


92

したがって、主な目的は、fat jarアプリケーションをドッキングして、Elasticbeanstalkに配置することでした。問題はコンテキストにあります。必要なのが実際には単一のjarファイルだけである場合、Dockerにこれほど多くのコンテキストを追加するのは少しばかげています。

.dockerignoreファイルで遊んでいますが、迷子になっています。gitignore否定を使用しようとしましたが、機能しません。

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

正規表現にもそのようなことがありますが、複雑な正規表現はサポートされていないようです。

^((?!Dockerfile).)*$

また、stackoverflowで検索してみましたが、次の2つだけが見つかりました。

この質問は2番目の質問と似ているかもしれませんが、ここでは1つのファイルをコンテキストに含めたいだけなので、少し違うと思います。

どんな助けでもありがたいです。


フォルダーの感嘆符は私のために働きます!
Ivan Aracki 2018年

回答:


135

一部のディレクトリまたはファイルを除くすべてを無視する必要があり、許可されたディレクトリ内の不要なファイルも無視する必要がある場合は、次の.dockerignoreファイルを使用できます。

# 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
Dockerのドキュメントによると*、(ではなく**)最初の行にのみ配置するだけで十分です。引用:「除外するファイルではなく、コンテキストに含めるファイルを指定することをお勧めします。これを実現するに*は、最初のパターンとして指定し、その後に1つ以上の!例外パターンを指定します」。
ジョニーサンダーマン

32

dockerfileリファレンスから:

Dokerは、Goのfilepath.Matchルールに加えて、任意の数のディレクトリ(ゼロを含む)に一致する特別なワイルドカード文字列**もサポートしています。たとえば、** / *。goは、ビルドコンテキストのルートを含む、すべてのディレクトリにある.goで終わるすべてのファイルを除外します。

したがって、単に**を含む行は、Dockerfileと同じディレクトリ内のすべてを無視します。

予想どおり、感嘆符を使用して、Dockerデーモンに送信するファイルを参照できます。


3
**がファイルの先頭に移動することが非常に重要です。そうしないと、除外が無視されます。Dockerは、一致する最後のルールを「最終」ルールとして使用するため、**最後の場合はすべてに一致します。
tedivm 2018年

3
したがって、含めるファイルが唯一の場合は**、最初の行と!foo次の行に追加しfooます。
Saca 2018

9

これは奇妙に聞こえるかもしれませんが、必要なのが単一のjarファイルだけである場合は、Dockerfileを含むビルドシステムに「docker」フォルダーを作成できます。ビルドを実行するときは、ビルドスクリプトで単一のjarファイルを「docker」にコピーしてから(「docker」フォルダー内から)docker image buildを実行し、完了したらdockerレジストリにプッシュします。


2
こんにちは、それはまったく奇妙に聞こえません。それは一般的な習慣だと思いましたが、可能であれば.dockerignoreを使ってそれを行う方法を探していました。その上、私は
mvnxmlが

dockerfileをサブディレクトリに配置し、.dockerignoreを使用することで、両方のアプローチを組み合わせることができます。ドキュメントによると、とにかくそうするのは良いことです
JonathanLee20年

Dockerのドキュメント:ほとんどの場合、コンテキストとして空のディレクトリから始めて、Dockerfileをそのディレクトリに保持することをお勧めします。Dockerfileの構築に必要なファイルのみを追加します。警告:ルートディレクトリ/をPATHとして使用しないでください。これにより、ビルドによってハードドライブのコンテンツ全体がDockerデーモンに転送されます。
ジョナサンリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.