Préréglage
Alternative à Kompose dans le navigateurZéro transmission au serveur

Convertisseur Docker Compose vers Manifestes Kubernetes (Compose vers K8s)

Convertissez les services, variables d'environnement, ports et montages de volumes docker-compose.yml en manifestes YAML Kubernetes Deployment et Service.

Presets:
Options du générateur K8s
docker-compose.ymlv3.8
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: db-data-pvc
  namespace: default
  labels:
    app.kubernetes.io/name: db-data
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
  namespace: default
  labels:
    app: frontend
    app.kubernetes.io/name: frontend
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  replicas: 2
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
        app.kubernetes.io/name: frontend
    spec:
      containers:
        - name: frontend
          image: node:20-alpine
          imagePullPolicy: IfNotPresent
          args:
            - npm
            - start
          workingDir: /app
          ports:
            - name: port-3000
              containerPort: 3000
              protocol: TCP
          env:
            - name: NODE_ENV
              value: production
            - name: API_URL
              value: http://backend:4000
          resources:
            limits:
              cpu: "1"
              memory: 1024Mi
            requests:
              cpu: 200m
              memory: 256Mi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
  namespace: default
  labels:
    app: backend
    app.kubernetes.io/name: backend
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  replicas: 2
  selector:
    matchLabels:
      app: backend
  template:
    metadata:
      labels:
        app: backend
        app.kubernetes.io/name: backend
    spec:
      containers:
        - name: backend
          image: node:20-alpine
          imagePullPolicy: IfNotPresent
          args:
            - node
            - dist/index.js
          workingDir: /app
          ports:
            - name: port-4000
              containerPort: 4000
              protocol: TCP
          env:
            - name: PORT
              value: "4000"
            - name: DATABASE_URL
              value: postgres://user:password@postgres:5432/appdb
            - name: REDIS_URL
              value: redis://redis:6379
          livenessProbe:
            exec:
              command:
                - curl
                - -f
                - http://localhost:4000/health
            initialDelaySeconds: 10
            periodSeconds: 30
            timeoutSeconds: 5
            failureThreshold: 3
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
  namespace: default
  labels:
    app: postgres
    app.kubernetes.io/name: postgres
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
        app.kubernetes.io/name: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:16-alpine
          imagePullPolicy: IfNotPresent
          ports:
            - name: port-5432
              containerPort: 5432
              protocol: TCP
          env:
            - name: POSTGRES_DB
              value: appdb
            - name: POSTGRES_USER
              value: user
            - name: POSTGRES_PASSWORD
              value: secretpassword123
          volumeMounts:
            - name: db-data
              mountPath: /var/lib/postgresql/data
      volumes:
        - name: db-data
          persistentVolumeClaim:
            claimName: db-data-pvc
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: default
  labels:
    app: redis
    app.kubernetes.io/name: redis
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
        app.kubernetes.io/name: redis
    spec:
      containers:
        - name: redis
          image: redis:7-alpine
          imagePullPolicy: IfNotPresent
          ports:
            - name: port-6379
              containerPort: 6379
              protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: frontend
  namespace: default
  labels:
    app: frontend
    app.kubernetes.io/name: frontend
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  type: ClusterIP
  selector:
    app: frontend
  ports:
    - name: port-3000
      protocol: TCP
      port: 3000
      targetPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: backend
  namespace: default
  labels:
    app: backend
    app.kubernetes.io/name: backend
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  type: ClusterIP
  selector:
    app: backend
  ports:
    - name: port-4000
      protocol: TCP
      port: 4000
      targetPort: 4000
---
apiVersion: v1
kind: Service
metadata:
  name: postgres
  namespace: default
  labels:
    app: postgres
    app.kubernetes.io/name: postgres
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  type: ClusterIP
  selector:
    app: postgres
  ports:
    - name: port-5432
      protocol: TCP
      port: 5432
      targetPort: 5432
---
apiVersion: v1
kind: Service
metadata:
  name: redis
  namespace: default
  labels:
    app: redis
    app.kubernetes.io/name: redis
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  type: ClusterIP
  selector:
    app: redis
  ports:
    - name: port-6379
      protocol: TCP
      port: 6379
      targetPort: 6379
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: frontend-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: frontend
                port:
                  number: 3000
          - path: /backend
            pathType: Prefix
            backend:
              service:
                name: backend
                port:
                  number: 4000
Services analysés
4

4 ports mappés sur 4 images de conteneur

Manifestes K8s
10

4 Deployments, 4 Services, 1 PVCs

Traitement local
0 ms Latence

Traitement AST en mémoire 100% dans le navigateur avec mises à jour instantanées

Conversion 100% Navigateur

Convertit vos fichiers docker-compose.yml en Deployments, Services et PVCs Kubernetes sans envoi de données.

Conformité Normes Kubernetes

Génère des ressources apps/v1 et v1 de qualité industrielle avec labels, sélecteurs et limites de ressources.

Alternative Légère à Kompose

Aucune dépendance binaire ou Go à installer : conversion immédiate et réactive dans votre navigateur.

Référence technique et guide d'architecture

Convertisseur Docker Compose vers Manifestes Kubernetes (Compose vers K8s) - Guide Développeur — Guide de référence

Convertissez les services, variables d'environnement, ports et montages de volumes docker-compose.yml en manifestes YAML Kubernetes Deployment et Service.

Paramètres clés et contrôles

servicesmap[string]Service

Définit les charges de travail converties en ressources Kubernetes apps/v1 Deployment avec réplicas et spécifications de conteneurs.

Par défaut : Requis
portsarray[string | object]

Mappages de ports traduits en containerPort dans les Pods et en port/targetPort dans les Services Kubernetes ClusterIP associés.

Par défaut : Optionnel
environment / env_filemap | array[string]

Variables d'environnement converties en paires clé-valeur directes ou en références sécurisées vers des ConfigMaps et Secrets.

Par défaut : Optionnel
volumesarray[string | object]

Montages de stockage traduits en volumeMounts pris en charge par des volumes emptyDir, HostPath ou PersistentVolumeClaim (PVC).

Par défaut : Optionnel
deploy.resourcesmap[string]object

Contraintes de calcul mappées vers resources.limits et resources.requests pour le processeur (CPU) et la mémoire dans Kubernetes.

Par défaut : Optionnel

Conseils de pro et bonnes practices

Ne conservez pas les mots de passe et

Ne conservez pas les mots de passe et variables sensibles en texte clair dans le YAML de Deployment. Extrayez-les dans des ressources Kubernetes Secret et ConfigMap avec envFrom.

Les volumes nommés de Compose ne

Les volumes nommés de Compose ne fonctionnent que sur un hôte unique. Sur Kubernetes, adoptez des PersistentVolumeClaims (PVC) liés à des StorageClasses dynamiques pour faciliter la migration des Pods.

Docker Compose s'appuie sur le réseau

Docker Compose s'appuie sur le réseau bridge par défaut. Sur Kubernetes, déclarez un Service ClusterIP pour chaque Deployment afin que les Pods communiquent via DNS (ex. http://nom-service:port).

Spécifiez toujours resources.requests

Spécifiez toujours resources.requests et limits. Sans requêtes déclarées, l'ordonnanceur Kubernetes ne peut pas positionner les Pods de manière optimale, risquant des arrêts imprévus par OOMKilled.

Pièges courants et dépannage

Échec de communication entre services avec Connection Refused ou erreur DNS NXDOMAIN

Vérifiez qu'un Service Kubernetes a été généré avec un sélecteur (selector: app: <nom-service>) correspondant aux labels du Pod, et interrogez le nom du Service plutôt que localhost.

Les bind mounts locaux (ex. ./src:/app) génèrent des dossiers vides ou des plantages du Pod sur le cluster

Les chemins relatifs locaux (./) n'existent pas sur les nœuds distants de Kubernetes. Intégrez le code applicatif dans l'image conteneur ou utilisez des volumes temporaires emptyDir.

Le Pod entre en état CrashLoopBackOff suite à une divergence entre command et entrypoint

Dans Docker Compose, 'command' correspond à 'args' dans Kubernetes, tandis que 'entrypoint' devient 'command'. Inspectez les événements avec 'kubectl describe pod <nom>' pour réaligner la syntaxe.

Foire aux questions (FAQ)

Comment cet outil convertit-il les services Docker Compose en manifestes Kubernetes ?▼

L'outil analyse chaque service décrit dans docker-compose.yml et génère automatiquement un manifeste Kubernetes apps/v1 Deployment ainsi qu'un Service v1 (ClusterIP) pour la connectivité interne. Images, ports, variables et volumes sont reconfigurés selon les standards Kubernetes.

Quelle est la différence entre cet outil web et l'utilitaire en ligne de commande Kompose ?▼

Kompose nécessite une installation locale en ligne de commande et des dépendances Go, alors que ce convertisseur s'exécute à 100 % dans votre navigateur. Vous obtenez instantanément des fichiers YAML prêts à l'emploi sans aucun téléchargement de binaire.

Comment les ports de Docker Compose sont-ils traduits dans Kubernetes ?▼

Une règle comme '8080:80' génère un Service où 'port: 8080' expose le port au sein du cluster et 'targetPort: 80' achemine le trafic vers le 'containerPort: 80' défini dans le conteneur du Deployment.

Mes fichiers de configuration et mes secrets d'environnement restent-ils privés ?▼

Oui, absolument. L'intégralité de l'analyse syntaxique et de la génération YAML s'effectue localement dans le moteur JavaScript de votre navigateur. Aucune donnée d'infrastructure ni aucun secret n'est envoyé sur un serveur externe.

Outils et utilitaires connexes

Tous les outils →
Guide du Développeur : Convertisseur JSON en Variables d'Environnement .env (Aplatir & Exporter)Développement

Aplatissez les charges utiles JSON imbriquées en configurations .env en SNAKE_CASE majuscule avec délimiteurs et préfixes personnalisables.

Ouvrir l'outil→
Générateur de Schémas SQL DDL vers Drizzle ORM (PostgreSQL, MySQL, SQLite) - Guide DéveloppeurDéveloppement

Convertissez vos instructions SQL CREATE TABLE en schémas Drizzle ORM fortement typés avec des définitions pgTable, mysqlTable et sqliteTable.

Ouvrir l'outil→
Guide Développeur : Générateur de Schémas Valibot depuis JSON (Validation TypeScript Modulaire)Développement

Transformez vos données JSON en définitions de schémas Valibot légères et compatibles tree-shaking avec v.object, v.string, v.number et des validateurs de tableaux.

Ouvrir l'outil→
Générateur de Schémas JSON vers TypeBox - Guide DéveloppeurDéveloppement

Convertissez des structures JSON en définitions TypeBox Type.Object haute performance pour Fastify, Ajv et la validation TypeScript à l'exécution.

Ouvrir l'outil→
Générateur de Migration Prisma Schema vers SQL DDLDéveloppement

Guide technique pour convertir des schémas Prisma en scripts SQL DDL compatibles PostgreSQL, MySQL et SQLite.

Ouvrir l'outil→
Guide Développeur : Générateur d'Interfaces et Types TypeScript depuis Prisma SchemaDéveloppement

Extrayez les modèles, énumérations, champs optionnels et relations de votre schéma Prisma sous forme d'interfaces TypeScript autonomes sans dépendance au runtime Prisma Client.

Ouvrir l'outil→