Docker堆栈部署有关顶级对象映射的错误

时间:2017-10-03 17:36:37

标签: docker docker-compose

继Docker入门指南https://docs.docker.com/get-started/part3/#your-first-docker-composeyml-file之后,我遇到了一个问题。我创建了docker-compose.yml文件并验证了内容是否正确:

version: "3"
services:
  web:
    image: joshuabelden/get-started:part2
    deploy:
      replicas: 5
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:
      - "80:80"
    networks:
      - webnet
networks:
  webnet:

我还证实我可以在群体外面运行我的图像。运行命令后:

 docker stack deploy -c docker-compose.yml getstartedlab

我收到以下错误:

Top-level object must be a mapping

我似乎无法找到有关错误消息的任何信息。

6 个答案:

答案 0 :(得分:9)

我要解决的问题是我删除了双引号,并将它们作为单引号进行更改 版本:“3” - >版本:'3' 这为我删除了错误,也为所有双引号执行此操作。

答案 1 :(得分:2)

你必须添加"卷"应该复制代码的地方:

version: "3"
services:
  web:
    image: iconkam/get-started:part2
    deploy:
      replicas: 5
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    volumes:
      - .:/app
    ports:
      - "80:80"
    networks:
      - webnet
networks:
  webnet:

答案 2 :(得分:1)

当Docker以Kubernetes模式运行而不是蜂拥而至时会发生这种情况。

我通过设置> Kubernetes enter image description here

将其更改为Swarm来修复它

答案 3 :(得分:0)

有时,这只是文件中的格式。建议您在撰写文件中选择文本,并查看您的某个地方是否有培训空白。

就我而言,我在图片标签后面有一个空格。

答案 4 :(得分:0)

此错误是由文件格式引起的。请尝试将文件编码转换为UTF-8,您将可以运行docker stack deploy命令。在这里双引号不是问题。

答案 5 :(得分:0)

就我而言,我将所有值都用双引号引起来,将副本期望为固定值。像这样:

version: "3"
services:
  web:
    # replace username/repo:tag with your name and image details
    image: "image details"
    deploy:
      replicas: 5
      resources:
        limits:
          cpus: "0.1"
          memory: "50M"
      restart_policy:
        condition: "on-failure"
    ports:
      - "4000:80"
    networks:
      - "webnet"
networks:
  webnet: