Docker composer, constraint - 没有找到预期的密钥

Docker composer, constraint - did not find expected key

我们使用 docker CE(最新)和 docker composer 版本 3.I 有一个 .yml 用于 3 个服务,但我想将 grafana 限制为 swarm 的主人。 添加约束时,我得到

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

我多次梳理脚本,找不到任何错误原因,我可能忽略了一些东西,我检查了非空格等,但找不到任何东西,我检查了其他关于相同错误的文章,而且我似乎也没有任何遗漏的括号或重复项。非常感谢您的帮助,谢谢。 :)

您在 grafana 部分的缩进有误。 image 之后的所有内容都用两个额外的空格隔开。

docker-compose.yml 文件依赖于额外空格是常见错误。 如果您使用 vi 或 vim,您可以使用 :%s/\s\+$//e 命令删除所有多余的空格。

如果您对环境变量使用字典类型声明,就会发生这种情况。

就我而言,我不得不更改格式

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

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

对我来说唯一改变的是升级我的 docker 桌面安装