python生成されたファイルをDockerイメージから除外するつもりだったので、コンテキストディレクトリのルートに.dockerignore
を追加しました。
# Ignore generated files
*.pyc
Alas docker build
はこれを無視し、次のようなディレクトリツリー全体をコピーします。
/contextdir/
|-- Dockerfile
\-- src/
|-- a.py # this is copies - all right
\-- a.pyc # this should be ignored, but is copied too. Why?
最後に、私はトリックが何であるかを理解しました。なんらかの理由で、これについての言及を見つけることができず、そのような構造を持つDockerfile
の例を見つけられなかったので、ここにドキュメント化します。それは誰にとっても些細なことでしたか?
https://docs.docker.com/engine/reference/builder/#/dockerignore-file の参照では、*.pyc
は、パスの最初、またはコンテキストディレクトリの直下のファイルにのみ一致しますが、再帰的には一致しません。再帰的に機能させるには、**/
構文を使用する必要があります:
# Ignore generated files
**/*.pyc
。dockerignoreのドキュメント は、パターンマッチングが Goのファイルパスマッチングロジック を使用していることを示しています。ドキュメントは再帰的なパターンもカバーしています:
Goのfilepath.Matchルールの他に、Dockerは、任意の数のディレクトリ(ゼロを含む)に一致する特別なワイルドカード文字列**もサポートしています。たとえば、**/*。goは、ビルドコンテキストのルートを含むすべてのディレクトリにある、.goで終わるすべてのファイルを除外します。