web-dev-qa-db-fra.com

Le fichier Docker-Compose a yaml.scanner.ScannerError

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?

23
Skeffington

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. :)

13
Skeffington

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 

45
virtuvious

Et j'ai oublié : après version

version '2'
14
vladkras

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.

5
Anthon

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.

0
Goke Obasa

Un autre coupable possible peut être les onglets égarés à la fin du fichier, que j'ai appris aujourd'hui.

0

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

0
calucifer