Collez un fichier Compose pour afficher l’inventaire des services et les constats d’un linter structurel local. Le YAML est analysé dans le navigateur : rien n’est envoyé, aucun démon Docker n’est contacté et Compose n’est jamais exécuté.
Fonctionne localement dans votre navigateurCollez compose.yaml ou docker-compose.yml. L’analyse et les contrôles s’exécutent localement dans le navigateur.
C’est un linter structurel local. Il ne télécharge pas d’images, n’inspecte pas le démon Docker, ne résout pas les variables d’environnement et n’exécute pas Compose.
| Service | Image / build | Ports | Dépend de |
|---|---|---|---|
| Aucun fichier Compose validé pour le moment. | |||
Collez un compose.yaml ou un docker-compose.yml puis cliquez sur Valider le fichier Compose. La page analyse le document dans le navigateur et affiche deux listes : les constats classés par gravité, chaque ligne indiquant le chemin de la clé concernée (par exemple services.db.ports[0]), et un inventaire des services avec l’image ou la source de build, les ports publiés et les cibles depends_on.
L’exemple intégré (api et db, chacun avec un volume nommé) ressort « prêt à relire », car rien n’empêche un docker compose up. En revanche, un port publié par deux services, un depends_on vers un service inexistant ou un cycle comme a → b → a sont signalés comme erreurs.
Structure : services doit être un mapping avec au moins un service, chaque service doit être un objet, et les noms n’acceptent que lettres, chiffres, points, traits de soulignement et traits d’union — Compose refuse le reste. image doit être une chaîne non vide et build un chemin ou un objet ; un service sans l’un des deux est signalé, car il ne peut pas démarrer.
Ports : le port du conteneur doit être compris entre 1 et 65535, et le port publié peut être un nombre ou une plage comme 8000-8005. Le linter signale les valeurs hors plage, les ports non numériques, les protocoles autres que tcp, udp ou sctp, ainsi que tout port publié en double ou qui se chevauche, dans un même service comme entre deux services. network_mode: host avec des ports publiés ajoute un avertissement, car ces mappings sont ignorés à l’exécution.
depends_on peut être une liste ou un mapping ; chaque cible doit exister et le graphe doit rester acyclique : a → b → a ou un service qui dépend de lui-même est signalé avec le cycle complet. container_name et privileged: true apparaissent en avertissement, car ils gênent la mise à l’échelle ou élargissent l’accès à l’hôte plus que nécessaire.
Les volumes nommés montés par un service doivent être déclarés dans le mapping volumes de premier niveau. L’analyseur local résout les ancres et les alias, et <<: *common est fusionné dans le service lorsqu’il pointe vers un mapping : une image qui n’arrive que par la clé de fusion figure donc quand même dans l’inventaire ; si la fusion ne peut pas être résolue, la ligne le dit au lieu d’annoncer une image manquante.
Rien n’est exécuté : la page ne lance jamais docker compose, ne contacte aucun démon Docker et ne télécharge aucune image. Les variables telles que ${POSTGRES_PASSWORD} ne sont pas résolues, les fichiers .env ne sont pas lus, et profiles ou extends ne sont contrôlés que comme structure. Les différences entre versions de Compose ne sont pas simulées : vérifiez le fichier final avec la version que vous déployez.
Le document est analysé dans votre navigateur : le texte collé n’est pas envoyé et la validation fonctionne hors ligne. Les fichiers très volumineux dépendent de la mémoire de votre appareil, et un seul document est lu à la fois — un fichier contenant un second document --- est refusé avec son numéro de ligne.