11

We using docker CE(latest) and docker composer version 3.I have a .yml for for 3 services but I want to constraint grafana to the master of the swarm. When adding the constraint I get

yaml: line 32: did not find expected key Tthe script is this:

version: '3'
services:
  influxdb:
    image: "influxdb:latest"
    volumes:
      - /mount/set/influxdb:/var/lib/influxdb
    ports:
      - "5076:5076"
    networks:
      - production

  kapacitor:
    image: "kapacitor:latest"
    environment:
      KAPACITOR_HOSTNAME: kapacitor
      KAPACITOR_INFLUXDB_0_URLS_0: http://influxdb:5086
    volumes:
      - /mount/set/kapacitor:/var/lib/kapacitor
    ports:
      - "9092:9092"
    networks:
      - production

  grafana:
    image: "grafana/grafana:latest"
      ports:
        - "7000:7000"
      networks:
        - production
      deploy:
        placement:
          constraints: [node.role == manager]
      volumes:
        - /iSCSIDisk/grafana/grafana.ini:/etc/grafana/grafana.ini
        - /iSCSIDisk/grafana/lib:/var/lib/grafana
      environment:
        GF_SECURITY_ADMIN_PASSWORD: secretsecret

      networks:
        production:
          external: true

I combed over the script several times and could not find any reason for the error, I may be overlooking something, I checked for non-spaces etc, and could not find anything, I checked other articles regarding the same error, and I don't seem to have any missing brackets or duplicates too. Your help will be much appreciated, thank you. :)

4 Answers4

21

Your indentation is broken in the grafana section. Everything after image is spaced in two extra spaces.

BMitch
  • 231,797
  • 42
  • 475
  • 450
2

It is common error with docker-compose.yml file depend on extra spaces. If you use vi or vim you can remove all extra spaces with :%s/\s\+$//e command.

0

This can happen if you are using dictionary type declarations for your environment variables.

In my case I had to change the format

environment:      
  DATASTORE_EMULATOR_HOST: "${DATASTORE_ENDPOINT}:${DATASTORE_PORT}"

to

environment:
  - DATASTORE_EMULATOR_HOST=${DATASTORE_ENDPOINT}:${DATASTORE_PORT}

The only thing that changed for me was upgrading my docker desktop installation

Matt
  • 389
  • 1
  • 8
  • 15
0

You've got your answer already, but I just stumbled on another (in hindsight obvious) issue: double quotes in a value when it is quoted with double quotes.

E.g.:

...
environment:
  PASSWORD: "a"123"
...

To fix, one should use single quotes:

...
environment:
  PASSWORD: 'a"123'
...
Saaru Lindestøkke
  • 2,067
  • 1
  • 25
  • 51