如何在 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,但每个键 jenkins
和 jenkins_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"
我正在按照此 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,但每个键 jenkins
和 jenkins_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"