web-dev-qa-db-fra.com

Docker ignore les modèles dans .dockerignore

J'avais l'intention d'exclure python les fichiers générés de l'image docker. J'ai donc ajouté .dockerignore à la racine du répertoire de contexte:

# Ignore generated files
*.pyc

Hélas docker build l'ignore et copie l'arborescence de répertoires entière qui ressemble à ceci:

/contextdir/
|-- Dockerfile
\-- src/
    |-- a.py   # this is copies - all right
    \-- a.pyc  # this should be ignored, but is copied too. Why?
21
Ilia Barahovski

Enfin, j'ai compris quel était le truc. Pour une raison quelconque, je n'ai pu trouver aucune mention de cela et je n'ai trouvé aucun exemple Dockerfile avec une telle construction, donc le documenter ici. C'était banal pour tout le monde?

La référence à https://docs.docker.com/engine/reference/builder/#/dockerignore-file ne met pas suffisamment en évidence que les modèles comme *.pyc ne correspondent qu'au début du chemin, ou pour les fichiers directement sous le répertoire de contexte, mais pas récursivement . Pour le faire fonctionner récursivement, le **/ la syntaxe doit être utilisée:

# Ignore generated files
**/*.pyc
49
Ilia Barahovski

Les documents pour .dockerignore indiquent que la correspondance de modèle utilise la logique de correspondance de chemin de fichier de Go . Les documents couvrent également le modèle récursif:

Au-delà des règles filepath.Match de Go, Docker prend également en charge une chaîne de caractères génériques spéciale ** qui correspond à n'importe quel nombre de répertoires (y compris zéro). Par exemple, **/*. Go exclura tous les fichiers se terminant par .go qui se trouvent dans tous les répertoires, y compris la racine du contexte de génération.

6
Elton Stoneman