Aller au contenu
Home » Docker-Compose : Echec du déploiement d’une pile : le service se réfère à un volume indéfini – Solution

Docker-Compose : Echec du déploiement d’une pile : le service se réfère à un volume indéfini – Solution

Advertisements

Some of the links shared in this post are affiliate links. If you click on the link and make a purchase, we will receive an affiliate commission at no additional cost to you.


Parfois, il peut arriver que le message d’erreur suivant s’affiche lors du lancement de la pile Docker-Compose, nativement ou via Portainer :

Failed to deploy a stack: service "docker" refers to undefined volume mnt/docker: invalid compose project

L’erreur “Failed to deploy a stack : service ‘docker’ refers to undefined volume mnt/docker: invalid compose project” se produit lorsque, dans un fichier Docker Compose, un volume est défini qui n’est pas correctement spécifié ou qui fait référence à un répertoire qui n’existe pas.

Description de l’erreur

L’erreur se produit généralement parce que le fichier Docker Compose(docker-compose.yml) contient un chemin d’accès au volume ou un nom de volume qui est soit :

  • n’estpas correctement formaté,
  • n’existe pas ou
  • n’apas étéclairement définie.

Le message d’erreur indique que le volume mnt/docker n’est pas défini ou correctement référencé. Cela signifie que Docker Compose ne peut pas résoudre ou créer le chemin indiqué.

Causes possibles

  1. Barre oblique de tête manquante: le chemin vers le volume ne commence pas par un /. Cela fait que Docker interprète le chemin comme un chemin relatif, ce qui est faux.
  2. Le répertoire n’existe pas: le chemin du répertoire indiqué(/mnt/docker) n’existe pas sur le système hôte.
  3. Erreur d’écriture ou syntaxe incorrecte: Une faute de frappe dans le chemin ou dans le fichier composite entraîne une définition erronée.
  4. La définition du volume est manquante ou mal placée: Si un volume nommé est utilisé, il doit être défini sous volumes : dans le fichier composite.

Etapes de la solution

1. vérifie et corrige le chemin du volume

  • Le chemin dans le fichier Docker Compose doit être absolu et correct.
  • Vérifie que le chemin existe sur le système hôte.

Exemple

services:
  my_service:
    image: my_image:latest
    volumes:
      - /mnt/docker:/data

Vérifie que /mnt/docker existe. Si ce n’est pas le cas, crée-le avec la commande :

sudo mkdir -p /mnt/docker

2. vérifie que le chemin ne comporte pas de fautes de frappe

Fais attention aux éventuelles fautes de frappe dans l’indication du volume et corrige-les.

Faux :

Pas de “/” de tête

volumes:
  - mnt/docker:/data

C’est vrai :

Leader “/”

volumes:
  - /mnt/docker:/data  

3. utilise correctement les volumes nommés

Si tu veux utiliser des volumes nommés, tu dois les définir explicitement sous volumes : dans le fichier composite :

Exemple de volumes nommés :

version: '3'

services:
  app:
    image: my_image:latest
    volumes:
      - mydata:/data

volumes:
  mydata:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /mnt/docker

Ici, le volume nommé mydata est défini et associé au chemin /mnt/docker. Le champ device devrait pointer vers un répertoire existant.

4. assure-toi que les répertoires existent et qu’ils ont les bonnes autorisations

Vérifie les autorisations et l’existence du répertoire. Docker doit être en mesure d’accéder au chemin indiqué et d’y écrire :

ls -ld /mnt/docker

Devrait s’assurer que le chemin existe et qu’il est lisible/inscriptible. Si ce n’est pas le cas, règle les autorisations en conséquence :

sudo chmod 755 /mnt/docker
sudo chown $USER:$USER /mnt/docker

5. vérifie la version Docker Compose

Assure-toi que le fichier Docker Compose utilisé correspond à la version Docker Compose installée. Utilise la version 3 ou supérieure pour utiliser les volumes nommés et d’autres fonctions avancées.

L’erreur “service ‘docker’ refers to undefined volume mnt/docker” se produit lorsque les volumes ne sont pas correctement définis ou que les chemins d’accès sont erronés. En vérifiant et en corrigeant soigneusement le fichier Docker Compose et la structure des répertoires, et en s’assurant que les volumes nommés sont correctement définis, le problème peut généralement être résolu.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Mastodon