web-dev-qa-db-ja.com

Docker-Composeファイルにはyaml.scanner.ScannerErrorがあります

compose.ymlファイル。次のようになります。

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

実行中に次のエラーが表示されます。

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

私が見るところ、フォーマットに何も問題はありません。空白がありません。私の全体的な目標は、開発モードのdocker-composeファイルを指定して、さまざまなモジュールのターゲットディレクトリを指すようにすることです。
ここで何が間違っていますか?

35
Skeffington

文字通り、数秒後に解決策を見つけました。 「build」の後に「discovery-microservice」を削除する必要があります。

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

また、相対パスのコンテキストで「./」を使用できます。 :)

16
Skeffington

わかりました、同様の問題をデバッグするために約3時間浪費しました。

下のエラーが表示されたら

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

その間にスペースが必要だから

version: '3' <-これは間違っています

バージョン: '3' <-これは正しい。

また、Eclipseを使用している場合は、YEdit YAMLエディタープラグインをインストールしてください。

64
virtuvious

そして、versionの後に:を忘れました

version '2'
14
vladkras

間違っているのは、ここにあることです:

    build: discovery-microservice

4つのスペースでインデントされたキーbuildを持つマッピングを開始します。そのキーの値は、discovery-microserviceで始まるスカラーで、key: valueのペアがあるかどうかに応じて次の行に続く可能性があります同じインデントレベルで

このような複数行のスカラー内で許可されていないのは、引用符で囲まれていない:andが異なるインデントレベルにあることです。まさにあなたが持っているものです。

contextとは異なるレベルでインデントされたbuildを参照するパーサーは、同じ行に(contextとして)後に続くことができないスカラー文字列discovery-microservice contextを書き込むことを想定しています。

回答で行ったようにビルド後にdiscovery-microserviceを削除することとは別に、この有効なYAMLを作成する理由は次のとおりです(ただし、異なる意味で、おそらくdocker composeには無意味です)。

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

そして

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

Docker-composeバージョン2ファイルの場合、buildキーはマッピング(上記の「ソリューション」のようにスカラーではなく)を想定しているため、これを解決する正しい答えが得られます。

5
Anthon

同じエラーメッセージが表示されたのに、解決策が異なっていたため、答えを持ち込みました。

元のdocker-compose.yml

volumes: mongo:

このスレッドのすべてのアイデアを試した後、私はdocker-composeドックに行き、ボリュームが次のように構成されている必要があることに気付きました。

volumes:
  mongo:

これに出くわす他の人はこれで終わりです。

2
thatgibbyguy

こんにちは、与えられた答えへの更なる更新....それはバージョンについて特にではありません: '2.0'行

エラー:yaml.scanner.ScannerError:ここでは値のマッピングは許可されていません

何らかの形式のエラーがあることを意味します。

私はそれを手に入れました、そしてそれは私のdocker-composeファイルにタブがなかったからでした

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

の代わりに

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

画像行にインデントタブがないことに注意してください

1
calucifer

外部(ホスト)サーバー上の特定のパスにマップされたボリュームが必要でした。 docker-compose.ymlの最上位のvolumesエントリの下に配置しようとしました。 docker-composeファイルのドキュメントを見て、そのタイプのボリュームはそこにないことに気付きました。代わりに、コンテナ定義内のvolumesエントリの下のみに移動します。例えば。:

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

今日、同様の問題が発生しました。docker-compose.ymlファイルの構文エラーが原因で、同じエラーが発生しました。

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

この行を削除// Add your services hereは私の問題を修正しました

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

これが同様の問題を抱えている人の助けになることを願っています。

0
Goke Obasa

もう1つの考えられる原因は、ファイルの最後にあるタブです。これは今日学びました。

0