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.
Soms kan het gebeuren dat de volgende foutmelding verschijnt bij het starten van de Docker Compose Stack, natively of via Portainer:
Failed to deploy a stack: service "docker" refers to undefined volume mnt/docker: invalid compose project
De fout “Failed to deploy a stack: service ‘docker’ refers to undefined volume mnt/docker
: invalid compose project” treedt op als een volume wordt gedefinieerd in een Docker Compose-bestand dat niet correct is opgegeven of verwijst naar een map die niet bestaat.
Foutbeschrijving
De fout treedt meestal op omdat het Docker Compose-bestand(docker-compose.yml
) een volumepad of volumelabel bevat die ofwel:
- isniet correct geformatteerd,
- niet bestaat of
- wasniet duidelijk gedefinieerd.
De foutmelding geeft aan dat het volume mnt/docker
niet correct is gedefinieerd of dat er niet correct naar wordt verwezen. Dit betekent dat Docker Compose het opgegeven pad niet kan oplossen of aanmaken.
Mogelijke oorzaken
- Ontbrekende voorloop schuine streep: Het pad naar het volume begint niet met een
/
. Hierdoor interpreteert Docker het pad als een relatief pad, wat onjuist is. - Directory bestaat niet: Het opgegeven directorypad
(/mnt/docker
) bestaat niet op het hostsysteem. - Typefout of onjuiste syntaxis: Een typefout in het pad of in het samenstelbestand leidt tot een onjuiste definitie.
- Volumedefinitie ontbreekt of is onjuist geplaatst: Als een genoemd volume wordt gebruikt, moet dit worden gedefinieerd onder
volumes:
in het compose-bestand.
Oplossingsstappen
1. Controleer en corrigeer het volumepad
- Het pad in het Docker Compose bestand moet absoluut en correct zijn.
- Controleer of het pad bestaat op het hostsysteem.
Voorbeeld:
services:
my_service:
image: my_image:latest
volumes:
- /mnt/docker:/data
Controleer of /mnt/docker
bestaat. Als dat niet het geval is, maak het dan aan met het commando:
sudo mkdir -p /mnt/docker
2. controleer het pad op typefouten
Let op mogelijke typefouten in de volumespecificatie en corrigeer ze.
Fout:
Geen leidende “/”
volumes:
- mnt/docker:/data
Correct:
Leidende “/”
volumes:
- /mnt/docker:/data
3. benoemde volumes correct gebruiken
Als je volumes met een naam wilt gebruiken, moet je deze expliciet definiëren onder volumes:
in het Compose-bestand:
Voorbeeld voor volumes met naam:
version: '3'
services:
app:
image: my_image:latest
volumes:
- mydata:/data
volumes:
mydata:
driver: local
driver_opts:
type: none
o: bind
device: /mnt/docker
Het genoemde volume mydata
wordt hier gedefinieerd en gekoppeld aan het pad /mnt/docker
. Het apparaatveld
moet verwijzen naar een bestaande map.
4. Controleer of de mappen bestaan en de juiste machtigingen hebben.
Controleer de autorisaties en het bestaan van de map. Docker moet toegang hebben tot het opgegeven pad en ernaar kunnen schrijven:
ls -ld /mnt/docker
Moet ervoor zorgen dat het pad bestaat en leesbaar/beschrijfbaar is. Als dat niet het geval is, stel dan de autorisaties dienovereenkomstig in:
sudo chmod 755 /mnt/docker
sudo chown $USER:$USER /mnt/docker
5. Controleer de versie van Docker Compose
Zorg ervoor dat het gebruikte Docker Compose-bestand overeenkomt met de geïnstalleerde Docker Compose-versie. Gebruik versie 3 of hoger om named volumes en andere geavanceerde functies te gebruiken.
De fout “service ‘docker’ refers to undefined volume mnt/docker
” treedt op wanneer volumes niet correct zijn gedefinieerd of wanneer de paden onjuist zijn. Het probleem kan meestal worden opgelost door het Docker Compose-bestand en de mapstructuur zorgvuldig te controleren en te corrigeren en ervoor te zorgen dat de genoemde volumes correct zijn gedefinieerd.