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 project
L’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/docker
2. 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/docker
Deve 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/docker
5. 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.