compose.yml
fichier, qui ressemble à ceci:
version: '2'
services:
discovery-microservice:
build: discovery-microservice
context: /discovery-microservice/target/docker
dockerfile: Dockerfile
ports:
- "8761:8761"
Pendant l'exécution, l'erreur suivante est générée:
yaml.scanner.ScannerError: mapping values are not allowed here
in "C:\...\docker-compose.yml", line 5, column 14
D'après ce que je vois, rien n'est faux avec le format, par exemple. espaces blancs manquants. Mon objectif général est de spécifier un fichier docker-composition en mode de développement, en le pointant vers les répertoires cibles des différents modules.
Qu'est-ce que je fais mal ici?
Littéralement trouvé la solution quelques secondes plus tard. Vous devez supprimer le "discovery-microservice" après "build":
version: '2'
services:
discovery-microservice:
build:
context: ./discovery-microservice/target/docker
dockerfile: Dockerfile
ports:
- "8761:8761"
Vous pouvez également utiliser "./" dans le contexte pour les chemins relatifs. :)
Ok, j'ai perdu environ 3 heures pour résoudre un problème similaire.
Si jamais vous obtenez l'erreur ci-dessous
ERROR: yaml.scanner.ScannerError: mapping values are not allowed here
in ".\docker-compose.yml", line 2, column 9
C'est parce qu'il vous faut un espace entre
version: '3' <- c'est faux
version: '3' <- c'est correct.
De plus, si vous utilisez Eclipse, faites-vous une faveur et installez le plug-in YEdit YAML Editor
Et j'ai oublié :
après version
version '2'
Ce qui ne va pas, c'est que ici:
build: discovery-microservice
vous commencez un mappage qui a une clé build
en retrait de quatre espaces. La valeur de cette clé est un scalaire qui commence par discovery-microservice
et continue jusqu'à la ligne suivante, selon que celle-ci a une key: value
paire au même niveau d'indentation ou non.
Ce qui n’est pas permis dans un tel scalaire multiligne, c’est que vous avez un :
et sans guillemets à un niveau d’indentation différent. Ce qui est exactement ce que vous avez.
L'analyseur qui voit context
mis en retrait à un niveau différent de build
suppose que vous écrivez une chaîne scalaire discovery-microservice context
qui ne peut pas être suivie sur la même ligne (comme context
) par un signe deux-points.
En plus de supprimer discovery-microservice
après la compilation comme vous l'avez fait dans votre réponse, ce qui rendrait également ce YAML valide (mais avec un sens différent, probablement dépourvu de sens pour la composition de docker) sont les suivants:
services:
discovery-microservice:
build: "discovery-microservice
context: /discovery-microservice/target/docker"
et
services:
discovery-microservice:
build: discovery-microservice
context: /discovery-microservice/target/docker"
Pour les fichiers de la version 2 de docker-compos, la clé build
attend un mappage (et non un scalaire comme dans les "solutions" ci-dessus), ce qui permet à votre réponse de résoudre correctement ce problème.
J'ai rencontré un problème similaire aujourd'hui, une erreur de syntaxe dans le fichier docker-compose.yml
qui a provoqué la même erreur.
version: '2'
services:
// Add your services here
discovery-microservice:
build: discovery-microservice
context: ./discovery-microservice/target/docker
dockerfile: Dockerfile
ports:
- "8761:8761"
Supprimer cette ligne // Add your services here
a corrigé mon problème
version: '2'
services:
discovery-microservice:
build:
context: ./discovery-microservice/target/docker
dockerfile: Dockerfile
ports:
- "8761:8761"
J'espère que cela aide quelqu'un avec un problème similaire.
Un autre coupable possible peut être les onglets égarés à la fin du fichier, que j'ai appris aujourd'hui.
Salut mise à jour supplémentaire à la réponse donnée .... Il ne s'agit pas spécifiquement de la version: ligne '2.0'
ERREUR: yaml.scanner.ScannerError: les valeurs de mappage ne sont pas autorisées ici
signifie qu'il y a une erreur de formatage de quelque sorte.
Je l'ai eu et c'est parce qu'il me manquait un onglet dans mon fichier docker-compose
version: '3.0'
services:
mysql:
image: ...
au lieu de
version: '3.0'
services:
mysql:
image: ...
Notez l'absence d'onglet indenté sur la ligne de l'image