wake-up-neo.com

Die Docker-Compose-Datei hat yaml.scanner.ScannerError

compose.yml-Datei, die folgendermaßen aussieht:

version: '2'
services:
  discovery-microservice:
    build: discovery-microservice
      context: /discovery-microservice/target/docker
      dockerfile: Dockerfile
  ports:
   - "8761:8761"

Während ich es ausführt, erhalte ich folgende Fehlermeldung:

yaml.scanner.ScannerError: mapping values are not allowed here
in "C:\...\docker-compose.yml", line 5, column 14

Soweit ich sehe, stimmt nichts mit dem Format, z. Leerzeichen fehlen. Mein übergeordnetes Ziel ist es, eine Docker-Compose-Datei für den Entwicklungsmodus anzugeben, die auf die Zielverzeichnisse der verschiedenen Module verweist.
Was mache ich hier falsch?

23
Skeffington

Wörtlich fand die Lösung Sekunden später. Sie müssen den "discovery-microservice" nach "build" entfernen:

version: '2'
services:
  discovery-microservice:
    build:
      context: ./discovery-microservice/target/docker
      dockerfile: Dockerfile
    ports:
     - "8761:8761"

Sie können auch "./" im Kontext für relative Pfade verwenden. :)

13
Skeffington

Ok, ich habe ungefähr 3 Stunden verschwendet, um ein ähnliches Problem zu debuggen. 

Wenn ihr Jungs jemals den untenstehenden Fehler bekommt

ERROR: yaml.scanner.ScannerError: mapping values are not allowed here
in ".\docker-compose.yml", line 2, column 9

Sein, weil Sie einen Raum zwischen benötigen 

version: '3' <- das ist falsch

version: '3' <- das ist richtig.

Wenn Sie Eclipse verwenden, tun Sie sich selbst einen Gefallen und installieren das YEdit YAML-Editor-Plugin 

45
virtuvious

Und ich habe : nach version vergessen

version '2'
14
vladkras

Was falsch ist, ist das hier:

    build: discovery-microservice

sie beginnen ein Mapping, dessen Schlüssel build um vier Leerzeichen eingerückt ist. Der Wert für diesen Schlüssel ist ein Skalar, der mit discovery-microservice beginnt und möglicherweise bis zur nächsten Zeile fortgesetzt wird, je nachdem, ob ein key: value-Paar auf derselben Eindrückebene vorhanden ist oder nicht

Was in einem solchen mehrzeiligen Skalar nicht zulässig ist, ist, dass Sie :ohne Anführungszeichen haben und das auf einer anderen Einrückungsebene haben. Welches ist genau das, was Sie haben.

Der Parser, der context auf einer anderen Ebene eingerückt sieht als build, nimmt an, dass Sie eine Skalarzeichenfolge discovery-microservice context schreiben, die nicht in derselben Zeile (als context) von einem Doppelpunkt gefolgt werden kann.

Abgesehen von dem Entfernen von discovery-microservice after build, wie Sie es in Ihrer Antwort getan haben, wäre dies auch eine gültige YAML (aber mit einer anderen Bedeutung, die für Docker-Compose wahrscheinlich nicht sinnvoll ist):

services:
  discovery-microservice:
    build: "discovery-microservice
      context: /discovery-microservice/target/docker"

und

services:
  discovery-microservice:
    build: discovery-microservice
    context: /discovery-microservice/target/docker"

Für Docker-Compose-Dateien der Version 2 erwartet die build-Taste ein Mapping (und keinen Skalar wie in den "Lösungen" oben), wodurch Ihre Antwort der richtige Weg ist, um dieses Problem zu lösen.

5
Anthon

Bringen Sie meine Antwort mit, denn obwohl ich die gleiche Fehlermeldung erhalten habe, war meine Lösung anders.

Original docker-compose.yml

volumes: mongo:

Nachdem ich alle Ideen in diesem Thread ausprobiert hatte, ging ich zu den Docker-Compose-Docks und erkannte, dass die Volumes wie folgt aufgebaut sein sollten:

volumes:
  mongo:

Das ist es für jeden anderen, der darauf stößt.

2
thatgibbyguy

Ich wollte ein Volume, das einem bestimmten Pfad auf dem externen (Host-) Server zugeordnet ist. Ich habe versucht, das unter den obersten volumes -Eintrag in docker-compose.yml Zu setzen. Nachdem ich mir die Docker-Compose-Datei-Dokumente angesehen hatte, stellte ich fest, dass diese Art von Datenträger dort nicht vorhanden ist. Stattdessen wird es nur unter dem Eintrag volumes in der Containerdefinition angezeigt. Z.B.:

version: "3.7"
services:
  web:
    image: my_custom_web_image
    build: ./app
    volumes:
      - ./app/subdir:/usr/src/app/subdir
0
Stephen G Tuggy

Ich bin heute auf ein ähnliches Problem gestoßen, einen Syntaxfehler in der docker-compose.yml-Datei, der denselben Fehler verursacht hat.

version: '2'
services:
// Add your services here
  discovery-microservice:
    build: discovery-microservice
      context: ./discovery-microservice/target/docker
      dockerfile: Dockerfile
  ports:
   - "8761:8761"

Das Entfernen dieser Zeile // Add your services here hat mein Problem behoben

version: '2'
services:
  discovery-microservice:
    build:
      context: ./discovery-microservice/target/docker
      dockerfile: Dockerfile
    ports:
     - "8761:8761"

Ich hoffe, das hilft jemandem mit einem ähnlichen Problem.

0
Goke Obasa

Ein weiterer möglicher Täter können verstreute Tabs am Ende der Datei sein, die ich heute gelernt habe.

0

Hallo weiter Update auf die gegebene Antwort .... Es geht nicht speziell um die Version: '2.0' Zeile Die Aussage 

ERROR: yaml.scanner.ScannerError: Zuordnungswerte sind hier nicht zulässig

bedeutet, dass es einen Formatierungsfehler gibt.

Ich habe es bekommen und es war, weil mir eine Registerkarte in meiner Docker-Compose-Datei fehlte

version: '3.0'
services:
  mysql:
  image: ...

anstatt

version: '3.0'
services:
  mysql:
    image: ...

Beachten Sie das Fehlen einer eingerückten Registerkarte in der Bildzeile

0
calucifer