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
- 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. - Le répertoire n’existe pas: le chemin du répertoire indiqué
(/mnt/docker
) n’existe pas sur le système hôte. - 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.
- 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.