如何在 ecs-cli 上撰写 运行 docker 时修复 "cannot unmarshal !!str `image:j...` into config.RawService" 错误?

How to fix "cannot unmarshal !!str `image:j...` into config.RawService" error while running docker compose on ecs-cli?

我正在按照此 AWS document 为我的项目设置容器化部署。我已设置 AWS CLI 以遵循文档中的步骤。我已成功构建 Jenkins 和 Jenkins Docker 卷映像并将其推送到我在 ECR 上的存储库。我将 ECS-CLI 安装到 运行 docker 撰写文件,但在 运行 宁 [=56] 时出现 "yaml: unmarshal errors:\n line 2: cannot unmarshal !!str image:j... into config.RawService" 错误=] 编写文件。

这是我第一次使用 docker compose,当我研究时发现它可能是版本问题。 ECS-CLI现在支持docker compose的三个版本,所以应该不是版本问题。

命令: ecs-cli 组合服务启动

docker-compose.yml(jenkins 是文档中的 jenkins-master 镜像):

jenkins:
  image:jenkins
  cpu_shares:100
  mem_limit:2000
  ports:"8080:8080","50000:50000" 
  volumes_from:jenkins_dv
jenkins_dv:
  image:jenkins_dv
  cpu_shares:100
  mem_limit:500

实际结果

ERRO[0000] 无法解析项目 awsinfra 的配置:yaml:解组错误:

第 2 行:无法将 !!str image:j... 解组为 config.RawService

第 8 行:无法将 !!str image:j... 解组为 config.RawService

ERRO[0000] 无法打开 ECS Compose 项目错误="yaml: unmarshal errors:\n line 2: cannot unmarshal !!str image:j... into config.RawService\n line 8: cannot unmarshal !!str image:j... into config.RawService"

FATA[0000] 无法创建和读取 ECS Compose 项目错误="yaml: unmarshal errors:\n line 2: cannot unmarshal !!str image:j... into config.RawService\n line 8: cannot unmarshal !!str image:j... into config.RawService"

你拥有的是有效的 YAML,但每个键 jenkinsjenkins_dv 的值都是一个多行纯标量字符串(纯如:不带引号)。 docker-compose 不知道如何处理这些字符串,它需要一个映射 (Python dict)

你想要的值是映射,为此你至少需要在键和值之间使用一个值指示符。 YAML 中的值指示符是一个冒号 (':'),后跟白色-space(即,与 jenkins 之后的指示符一样的换行符或 space.

尝试:

jenkins:
  image: jenkins
  cpu_shares: 100
  mem_limit: 2000
  ports: ["8080:8080", "50000:50000"]
  volumes_from: jenkins_dv
jenkins_dv:
  image: jenkins_dv
  cpu_shares: 100
  mem_limit: 500

IIRC ports 的值必须是一个序列,所以我将其值更改为流式序列。该序列中条目分隔符 (,) 之后的 space 不是绝对必要的,但可以使恕我直言的内容更具可读性。你也可以这样做:

  ports: 
  - "8080:8080"
  - "50000:50000"