ForHosting KIT · Outils pour développeurs

Analyse des bonnes pratiques Dockerfile avec lignes

Cet analyseur de bonnes pratiques Dockerfile contrôle trois problèmes courants avant qu’une image n’atteigne le système de construction.

● BetaGratuit · dans votre navigateur
Utilisez-le depuis WebAPIE-mailTelegramApp bientôt

Il signale l’absence de WORKDIR, les images de base utilisant le tag mutable latest et les instructions RUN successives susceptibles de créer des couches superflues. Chaque constat indique une ligne source, un type stable et une explication directe, aussi utiles pour votre lecture du fichier que pour un contrôle automatisé d’intégration continue.

Obtenez un rapport Dockerfile concis et exploitable

Collez le contenu complet du Dockerfile dans le champ de texte, puis lancez le contrôle. La réponse précise si le fichier réussit, compte les constats et décrit chaque problème avec un numéro de ligne commençant à un, un type stable lisible par une machine et un message concis. L’analyseur cible volontairement trois risques de maintenance fréquents sans prétendre remplacer une suite complète de sécurité des conteneurs. Un WORKDIR absent est indiqué à la ligne 1, car cette omission concerne tout le fichier. Une instruction FROM est signalée sur sa propre ligne lorsque son image emploie explicitement latest ou omet le tag et correspond donc à latest. Si deux RUN se suivent, le second est signalé avec un renvoi vers la ligne précédente. Les commentaires et lignes vides ne masquent pas ce rapport. Un fichier correct renvoie un tableau findings vide, ce qui permet d’utiliser directement valid comme condition de réussite. Les continuations par barre oblique inverse constituent une seule instruction logique, tout en conservant la première ligne physique comme emplacement dans l’éditeur.

Comprenez l’intérêt de ces trois pratiques

WORKDIR rend explicite le contexte du système de fichiers pour les instructions RUN, COPY, CMD et ENTRYPOINT suivantes. Sans cette déclaration, la construction hérite silencieusement d’un répertoire choisi par l’image de base, lequel peut changer lors d’une mise à jour. Fixer l’image de FROM avec un tag versionné ou un digest immuable améliore la reproductibilité. Une référence sans tag et un tag latest peuvent tous deux désigner un contenu différent alors que le Dockerfile n’a pas changé. En outre, chaque RUN crée normalement une couche du système de fichiers. Des commandes successives d’installation, de nettoyage ou de configuration gagnent souvent à appartenir à une même opération shell afin que les fichiers temporaires soient supprimés dans la même couche et que l’historique reste lisible. Le constat reste une recommandation, car des RUN séparés peuvent être intentionnels pour préserver des limites de cache utiles. L’outil ne réécrit aucune commande et ne suppose pas que toute fusion soit sûre. La décision finale revient à la personne qui connaît la construction, sa stratégie de cache et le comportement des commandes en cas d’échec.

Placez le contrôle avant les constructions coûteuses

Exécutez l’analyseur depuis votre éditeur, avant un commit ou au début de l’intégration continue, avant de télécharger les images de base et de compiler l’application. Envoyez le texte source original plutôt qu’une représentation analysée afin de conserver les lignes physiques et les continuations. L’algorithme est déterministe : une entrée identique produit toujours la même sortie, sans réseau, horloge, hasard, daemon Docker ni état propre à l’environnement. Il convient donc aussi aux Dockerfiles générés. Considérez le rapport comme un indicateur élémentaire de maintenabilité, et non comme une preuve de sécurité ou de constructibilité. L’outil n’exécute pas les commandes shell, ne résout pas les variables des noms d’images, n’inspecte pas les paquets, ne valide pas les sources COPY, n’impose pas un USER non privilégié et ne recherche aucune vulnérabilité. Associez ce contrôle rapide à une véritable construction, à une analyse d’image, à des politiques et à des tests. Une entrée composée uniquement d’espaces ou de commentaires échoue, car elle ne contient aucune instruction Dockerfile à examiner.

Réviser un Dockerfile avant le commit

Repérez les références mutables et les répertoires de travail ambigus pendant que vous modifiez encore les lignes concernées.

Contrôler les définitions générées

Vérifiez la sortie des modèles avant que le pipeline ne consacre du temps à construire et publier une image.

Évaluer un dépôt de conteneurs

Produisez des constats cohérents et numérotés pour classer les corrections simples entre plusieurs services.

Quel est le prix d’une analyse ?

Chaque requête API coûte $0.002. Vous pouvez aussi utiliser directement la version navigateur de cette page.

Une image sans tag est-elle considérée comme latest ?

Oui. Docker interprète un tag omis comme latest ; l’analyseur recommande donc un tag versionné ou un digest.

L’outil fusionne-t-il automatiquement les RUN ?

Non. Il signale les RUN successifs sans les réécrire, car des limites de cache séparées peuvent être voulues.

Pourquoi un WORKDIR absent est-il placé à la ligne 1 ?

L’omission concerne tout le fichier et ne possède aucune ligne propre ; la ligne 1 sert donc d’emplacement global.

Ce contrôle valide-t-il la syntaxe ou la sécurité ?

Non. Il applique trois règles simples et doit être complété par une construction, des politiques et une analyse des vulnérabilités.

Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.

POSThttps://api.kit.forhosting.com/dev2/dockerfile-lint-basic

Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.

curl -X POST https://api.kit.forhosting.com/dev2/dockerfile-lint-basic \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"FROM node:20-alpine\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci && npm cache clean --force\nCOPY . .\nCMD [\"node\", \"server.js\"]"}'
{
  "text": "FROM node:20-alpine\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci && npm cache clean --force\nCOPY . .\nCMD [\"node\", \"server.js\"]"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "dev2.dockerfile_lint_basic",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.

par requête$0.002

Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.

HTTPCodeSignification
401unauthorizedClé API absente ou invalide : vérifiez l’en-tête Authorization.
402insufficient_balanceSolde insuffisant : rechargez votre compte pour lancer cette tâche.
404unknown_typeType de tâche inconnu : vérifiez le champ type de votre requête.
429rate_limitedTrop de requêtes : ralentissez la cadence, puis réessayez.

Consulter la documentation complète du KIT →