⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Vérification de votre configuration de compilation

Availability: Beta
Requires: Docker Buildx 0.15.0 and later

Les vérifications de compilation (build checks) sont une fonctionnalité introduite dans Dockerfile 1.8. Elles vous permettent de valider votre configuration de compilation et d'effectuer une série de vérifications avant d'exécuter votre compilation. Considérez-les comme une forme avancée de linting pour votre Dockerfile et vos options de compilation, ou un mode de simulation pour les compilations.

Vous pouvez trouver la liste des vérifications disponibles, ainsi qu'une description de chacune, dans la référence des vérifications de compilation.

Comment fonctionnent les vérifications de compilation

Typiquement, lorsque vous exécutez une compilation, Docker exécute les étapes de compilation de votre Dockerfile et les options de compilation comme spécifié. Avec les vérifications de compilation, plutôt que d'exécuter les étapes de compilation, Docker vérifie le Dockerfile et les options que vous fournissez et signale les problèmes qu'il détecte.

Les vérifications de compilation sont utiles pour :

  • Valider votre Dockerfile et vos options de compilation avant d'exécuter une compilation.
  • S'assurer que votre Dockerfile et vos options de compilation sont à jour avec les dernières meilleures pratiques.
  • Identifier les problèmes potentiels ou les anti-modèles dans votre Dockerfile et vos options de compilation.
Tip

Vous voulez une meilleure expérience d'édition pour les Dockerfiles dans VS Code ? Découvrez l'extension Docker pour VS Code (Bêta) pour le linting, la navigation dans le code et l'analyse des vulnérabilités.

Compiler avec des vérifications

Les vérifications de compilation sont prises en charge dans :

L'invocation d'une compilation exécute les vérifications par défaut et affiche les violations dans la sortie de la compilation. Par exemple, la commande suivante compile l'image et exécute les vérifications :

$ docker build .
[+] Building 3.5s (11/11) FINISHED
...

1 warning found (use --debug to expand):
  - Lint Rule 'JSONArgsRecommended': JSON arguments recommended for CMD to prevent unintended behavior related to OS signals (line 7)

Dans cet exemple, la compilation s'est déroulée avec succès, mais un avertissement JSONArgsRecommended a été signalé, car les instructions CMD doivent utiliser la syntaxe de tableau JSON.

Avec les actions GitHub, les vérifications s'affichent dans la vue des différences des pull requests.

name: Build and push Docker images
on:
  push:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Build and push
        uses: docker/[email protected]
Annotations de vérification de compilation GitHub Actions

Sortie plus verbeuse

Les avertissements de vérification pour une compilation docker build régulière affichent un message concis contenant le nom de la règle, le message et le numéro de ligne où le problème est apparu dans le Dockerfile. Si vous souhaitez voir des informations plus détaillées sur les vérifications, vous pouvez utiliser l'indicateur --debug. Par exemple :

$ docker --debug build .
[+] Building 3.5s (11/11) FINISHED
...

 1 warning found:
 - JSONArgsRecommended: JSON arguments recommended for CMD to prevent unintended behavior related to OS signals (line 4)
JSON arguments recommended for ENTRYPOINT/CMD to prevent unintended behavior related to OS signals
More info: https://docs.docker.com/go/dockerfile/rule/json-args-recommended/
Dockerfile:4
--------------------
   2 |
   3 |     FROM alpine
   4 | >>> CMD echo "Hello, world!"
   5 |
--------------------

Avec l'indicateur --debug, la sortie inclut un lien vers la documentation de la vérification et un extrait du Dockerfile où le problème a été trouvé.

Vérifier une compilation sans construire

Pour exécuter les vérifications de compilation sans construire réellement, vous pouvez utiliser la commande docker build comme vous le feriez normalement, mais avec l'ajout de l'indicateur --check. Voici un exemple :

$ docker build --check .

Au lieu d'exécuter les étapes de compilation, cette commande exécute uniquement les vérifications et signale les problèmes qu'elle trouve. S'il y a des problèmes, ils seront signalés dans la sortie. Par exemple :

Sortie avec --check
[+] Building 1.5s (5/5) FINISHED
=> [internal] connecting to local controller
=> [internal] load build definition from Dockerfile
=> => transferring dockerfile: 253B
=> [internal] load metadata for docker.io/library/node:22
=> [auth] library/node:pull token for registry-1.docker.io
=> [internal] load .dockerignore
=> => transferring context: 50B
JSONArgsRecommended - https://docs.docker.com/go/dockerfile/rule/json-args-recommended/
JSON arguments recommended for ENTRYPOINT/CMD to prevent unintended behavior related to OS signals
Dockerfile:7
--------------------
5 |
6 |     COPY index.js .
7 | >>> CMD node index.js
8 |
--------------------

Cette sortie avec --check montre le message verbeux pour la vérification.

Contrairement à une compilation normale, si des violations sont signalées lors de l'utilisation de l'indicateur --check, la commande se termine avec un code de sortie non nul.

Faire échouer la compilation en cas de violations de vérification

Les violations de vérification pour les compilations sont signalées comme des avertissements, avec un code de sortie 0, par défaut. Vous pouvez configurer Docker pour faire échouer la compilation lorsque des violations sont signalées, en utilisant une directive check=error=true dans votre Dockerfile. Cela provoquera une erreur de compilation après l'exécution des vérifications de compilation, avant que la compilation réelle ne soit exécutée.

Dockerfile
1
2
3
4
5
# syntax=docker/dockerfile:1
# check=error=true

FROM alpine
CMD echo "Hello, world!"

Sans la directive # check=error=true, cette compilation se terminerait avec un code de sortie de 0. Cependant, avec la directive, la violation de la vérification de compilation entraîne un code de sortie non nul :

$ docker build .
[+] Building 1.5s (5/5) FINISHED
...

 1 warning found (use --debug to expand):
 - JSONArgsRecommended: JSON arguments recommended for CMD to prevent unintended behavior related to OS signals (line 5)
Dockerfile:1
--------------------
   1 | >>> # syntax=docker/dockerfile:1
   2 |     # check=error=true
   3 |
--------------------
ERROR: lint violation found for rules: JSONArgsRecommended
$ echo $?
1

Vous pouvez également définir la directive d'erreur sur la CLI en passant l'argument de compilation BUILDKIT_DOCKERFILE_CHECK :

$ docker build --check --build-arg "BUILDKIT_DOCKERFILE_CHECK=error=true" .

Ignorer les vérifications

Par défaut, toutes les vérifications sont exécutées lorsque vous compilez une image. Si vous souhaitez ignorer des vérifications spécifiques, vous pouvez utiliser la directive check=skip dans votre Dockerfile. Le paramètre skip prend une chaîne CSV des ID de vérification que vous souhaitez ignorer. Par exemple :

Dockerfile
# syntax=docker/dockerfile:1
# check=skip=JSONArgsRecommended,StageNameCasing

FROM alpine AS BASE_STAGE
CMD echo "Hello, world!"

La compilation de ce Dockerfile n'entraîne aucune violation de vérification.

Vous pouvez également ignorer les vérifications en passant l'argument de compilation BUILDKIT_DOCKERFILE_CHECK avec une chaîne CSV des ID de vérification que vous souhaitez ignorer. Par exemple :

$ docker build --check --build-arg "BUILDKIT_DOCKERFILE_CHECK=skip=JSONArgsRecommended,StageNameCasing" .

Pour ignorer toutes les vérifications, utilisez le paramètre skip=all :

Dockerfile
# syntax=docker/dockerfile:1
# check=skip=all

Combiner les paramètres error et skip pour les directives de vérification

Pour ignorer des vérifications spécifiques et provoquer une erreur en cas de violations de vérification, passez à la fois les paramètres skip et error séparés par un point-virgule (;) à la directive check dans votre Dockerfile ou dans un argument de compilation. Par exemple :

Dockerfile
# syntax=docker/dockerfile:1
# check=skip=JSONArgsRecommended,StageNameCasing;error=true
Argument de compilation
$ docker build --check --build-arg "BUILDKIT_DOCKERFILE_CHECK=skip=JSONArgsRecommended,StageNameCasing;error=true" .

Vérifications expérimentales

Avant que les vérifications ne soient promues stables, elles peuvent être disponibles en tant que vérifications expérimentales. Les vérifications expérimentales sont désactivées par défaut. Pour voir la liste des vérifications expérimentales disponibles, reportez-vous à la référence des vérifications de compilation.

Pour activer toutes les vérifications expérimentales, définissez l'argument de compilation BUILDKIT_DOCKERFILE_CHECK sur experimental=all :

$ docker build --check --build-arg "BUILDKIT_DOCKERFILE_CHECK=experimental=all" .

Vous pouvez également activer les vérifications expérimentales dans votre Dockerfile en utilisant la directive check :

Dockerfile
# syntax=docker/dockerfile:1
# check=experimental=all

Pour activer sélectivement les vérifications expérimentales, vous pouvez passer une chaîne CSV des ID de vérification que vous souhaitez activer, soit à la directive check dans votre Dockerfile, soit en tant qu'argument de compilation. Par exemple :

Dockerfile
# syntax=docker/dockerfile:1
# check=experimental=JSONArgsRecommended,StageNameCasing

Notez que la directive experimental a priorité sur la directive skip, ce qui signifie que les vérifications expérimentales s'exécuteront quel que soit le paramètre skip que vous avez défini. Par exemple, if vous définissez skip=all et activez les vérifications expérimentales, les vérifications expérimentales s'exécuteront quand même :

Dockerfile
# syntax=docker/dockerfile:1
# check=skip=all;experimental=all

Lectures complémentaires

Pour plus d'informations sur l'utilisation des vérifications de compilation, consultez :