Vai al contenuto
Home » Docker-Compose: Impossibile distribuire uno stack: il servizio fa riferimento a un volume non definito – Soluzione

Docker-Compose: Impossibile distribuire uno stack: il servizio fa riferimento a un volume non definito – Soluzione

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.


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

  1. 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.
  2. La directory non esiste: il percorso della directory specificata(/mnt/docker) non esiste sul sistema host.
  3. Errore di battitura o sintassi errata: Un errore di battitura nel percorso o nel file di composizione porta a una definizione errata.
  4. 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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Mastodon