Ci-dessous, les différences entre deux révisions de la page.
| sysadmin:docker:build_context [2023/04/25 10:24] – créée yoann | sysadmin:docker:build_context [2023/04/25 14:49] (Version actuelle) – yoann | ||
|---|---|---|---|
| Ligne 6: | Ligne 6: | ||
| Docker est une application client-serveur, | Docker est une application client-serveur, | ||
| - | La création d'une nouvelle image est une opération qui s' | + | La création d'une nouvelle image est une opération qui s' |
| <code bash> | <code bash> | ||
| - | # Construction d'une image à partir du Dockerfile dans le répertoire courant | + | # Dans cet exemple |
| - | # Le build context est le répertoire courant ' | + | |
| docker build -t " | docker build -t " | ||
| + | |||
| + | # Ici le buid context est le sous répertoire ./bc/ | ||
| + | docker build -t " | ||
| + | |||
| + | # Le Dokerfile doit être présent à la racine du build context. | ||
| + | # Si ce n'est pas le cas ou si le nom est différent l' | ||
| + | # permet de définir le chemin du Dokerfile | ||
| + | docker build -t " | ||
| </ | </ | ||
| - | Il est possible d' | + | ===== Exclure des fichiers du build context ===== |
| + | |||
| + | Il est possible d' | ||
| + | |||
| + | < | ||
| + | Une bonne pratique consiste à s'assurer que le build context ne contient que les fichiers strictement nécessaires à la création | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Dépannage ===== | ||
| + | |||
| + | ==== Error checking context: can't stat ... ==== | ||
| + | |||
| + | Les dossiers présents dans le build context doivent être accessibles à l' | ||
| + | |||
| + | Ce comportement peut surprendre. Il est illustré ci-dessous: | ||
| + | |||
| + | <code bash> | ||
| + | tree -a -L 1 . | ||
| + | . | ||
| + | ├── Dockerfile | ||
| + | ├── .dockerignore | ||
| + | ├── .git | ||
| + | ├── noaccess | ||
| + | ├── README.txt | ||
| + | └── token.txt | ||
| + | </ | ||
| + | |||
| + | Dans cet exemple le dossier courant est notre build context. Il contient un dossier '' | ||
| + | |||
| + | <code bash> | ||
| + | ls -ld noaccess/ | ||
| + | drwx------ 2 1001 1001 4096 avril 24 19:13 noaccess/ | ||
| + | </ | ||
| + | |||
| + | Le dossier noaccess n'est pas nécessaire pour la création | ||
| + | |||
| + | <file txt .dockerignore> | ||
| + | noaccess | ||
| + | .git | ||
| + | token.txt | ||
| + | .dockerignore | ||
| + | </ | ||
| + | |||
| + | Malgré l' | ||
| + | |||
| + | <code bash> | ||
| + | docker build -t " | ||
| + | [+] Building 0.1s (2/2) FINISHED | ||
| + | => ERROR [internal] load build definition from Dockerfile | ||
| + | => => transferring dockerfile: 72B 0.0s | ||
| + | => ERROR [internal] load .dockerignore | ||
| + | => => transferring context: 68B | ||
| + | ------ | ||
| + | > [internal] load build definition from Dockerfile: | ||
| + | ------ | ||
| + | ------ | ||
| + | > [internal] load .dockerignore: | ||
| + | ------ | ||
| + | failed to solve with frontend dockerfile.v0: | ||
| + | </ | ||
| + | Pour éviter cette erreur deux solutions: | ||
| + | - Positionner les droits en lecture seule sur le répertoire et son contenu; | ||
| + | - Créer un sous répertoire pour le build context ne contenant pas des dossiers non accessibles. | ||
| + | Ici on fait le choix de créer un répertoire dédié pour le build context: | ||
| + | |||
| ===== Références ===== | ===== Références ===== | ||
| * https:// | * https:// | ||