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.
A volte può capitare che venga visualizzato il seguente messaggio di errore quando si avvia Docker Compose Stack, in modo nativo o tramite Portainer:
Failed to deploy a stack: service "docker" refers to undefined volume mnt/docker: invalid compose projectL’errore “Failed to deploy a stack: service ‘docker’ refers to undefined volume mnt/docker: invalid compose project” si verifica se in un file Docker Compose viene definito un volume che non è specificato correttamente o che fa riferimento a una directory inesistente.
Descrizione dell’errore
L’errore si verifica di solito perché il file di Docker Compose(docker-compose.yml) contiene un percorso di volume o un’etichetta di volume che sono:
- non è formattato correttamente,
- non esiste o
- non era chiaramente definito.
Il messaggio di errore indica che il volume mnt/docker non è definito o referenziato correttamente. Ciò significa che Docker Compose non può risolvere o creare il percorso specificato.
Possibili cause
- Manca la barra iniziale: il percorso del volume non inizia con una
/. Questo fa sì che Docker interpreti il percorso come un percorso relativo, il che non è corretto. - La directory non esiste: il percorso della directory specificata
(/mnt/docker) non esiste sul sistema host. - Errore di battitura o sintassi errata: Un errore di battitura nel percorso o nel file di composizione porta a una definizione errata.
- La definizione del volume manca o è posizionata in modo errato: Se si utilizza un volume con nome, questo deve essere definito sotto
Volumi:nel file di composizione.
Passi della soluzione
1. controllare e correggere il percorso del volume
- Il percorso del file Docker Compose deve essere assoluto e corretto.
- Assicurati che il percorso esista sul sistema host.
Esempio:
services:
my_service:
image: my_image:latest
volumes:
- /mnt/docker:/data
Assicurati che /mnt/docker esista. In caso contrario, crealo con il comando
sudo mkdir -p /mnt/docker2. controlla che il percorso non contenga errori di battitura
Presta attenzione a eventuali errori di battitura nelle specifiche del volume e correggili.
Sbagliato:
Nessun “/” iniziale
volumes:
- mnt/docker:/data
Corretto:
Con l’aggiunta di “/”
volumes:
- /mnt/docker:/data 3. utilizzare correttamente i volumi denominati
Se vuoi utilizzare dei volumi con nome, devi definirli esplicitamente alla voce volumi: del file Compose:
Esempio per i volumi denominati:
version: '3'
services:
app:
image: my_image:latest
volumes:
- mydata:/data
volumes:
mydata:
driver: local
driver_opts:
type: none
o: bind
device: /mnt/docker
Il volume denominato mydata viene definito qui e collegato al percorso /mnt/docker. Il campo dispositivo deve puntare a una directory esistente.
4. assicurarsi che le directory esistano e che abbiano le autorizzazioni corrette
Controlla le autorizzazioni e l’esistenza della directory. Docker deve essere in grado di accedere al percorso specificato e di scriverci:
ls -ld /mnt/dockerDeve assicurarsi che il percorso esista e sia leggibile/scrittibile. In caso contrario, imposta le autorizzazioni di conseguenza:
sudo chmod 755 /mnt/docker
sudo chown $USER:$USER /mnt/docker5. verificare la versione di Docker Compose
Assicurati che il file Docker Compose utilizzato corrisponda alla versione di Docker Compose installata. Usa la versione 3 o superiore per utilizzare i volumi denominati e altre funzioni avanzate.
L’errore “service ‘docker’ refers to undefined volume mnt/docker” si verifica quando i volumi non sono definiti correttamente o i percorsi sono errati. Di solito il problema può essere risolto controllando e correggendo attentamente il file Docker Compose e la struttura delle directory e assicurandosi che i volumi nominati siano definiti correttamente.




