【问题标题】:What does AWS ECS exception Container.image contains invalid char means?AWS ECS 异常 Container.image contains invalid char 是什么意思?
【发布时间】:2018-08-12 03:32:16
【问题描述】:

我们在工作流程中使用 CircleCi,以便将 PHP 站点部署为 ElasticBeanstalk 服务器上的 docker 映像。 CircleCi 中的build 工作定义如下:

deploy:
    docker:
      - image: docker:17.05.0-ce-git
    steps:
      - checkout
      - setup_remote_docker
      - run:
          name: Install dependencies
          command: |
            apk add --no-cache \
              py-pip=9.0.0-r1
            pip install \
              awscli \
              awsebcli --upgrade
      - run:
          name: Login to AWS
          command: |
            login="$(aws ecr get-login --no-include-email --region us-west-2)"
            ${login}
      - run:
          name: Deploy to Elastic Beanstalk
          command: |
            echo "Commit sha: ${CIRCLE_SHA1}"
            if [ "${CIRCLE_BRANCH}" == "docker" ]; then
              sed -i'' -e "s/%BUILD_NUM%/${CIRCLE_SHA1}/g" Dockerrun.aws.json
              eb deploy sales-web -l $CIRCLE_SHA1
            fi

在containerDefinitions 下的 Dockerrun.aws.json 中,我们有(#### 是 ECS 中应用程序 ID 和存储库名称的正确值)

{
            "essential": true,
            "image": "####.dkr.ecr.us-west-2.amazonaws.com/####:%BUILD_NUM%",
            "memory": 2048,
            "name": "web-container",
            "portMappings": [
                {
                    "containerPort": 80,
                    "hostPort": 80
                }
            ]
        }

登录AWS步骤成功并上传图片,环境sales-web开始更新但失败

2018-03-02 16:10:41 UTC+0200    ERROR   Failed to deploy application.
2018-03-02 16:10:41 UTC+0200    ERROR   Service:AmazonECS, Code:ClientException, Message:Container.image contains invalid characters., Class:com.amazonaws.services.ecs.model.ClientException
2018-03-02 16:09:52 UTC+0200    INFO    Environment update is starting.

我们已经确保镜像构建正确(我们可以将它上传到 CircleCi 服务器,启动容器并运行 phpunit 测试)。项目根目录下有.elasticbeanstalk文件夹,有效config.yml文件。

已经尝试并在 Google 上搜索了 2 天,但没有成功。 将感谢任何帮助或指导以了解此错误消息的含义。如果需要任何其他详细信息,我会提供,请尽管询问。

【问题讨论】:

  • 你能检查“####.dkr.ecr.us-west-2.amazonaws.com/####:%BUILD_NUM%”是否有任何非ASCII?例如,虽然冒号看起来像冒号,但它真的是冒号吗?在从 MS Word/Outlook 等工具复制文本之前,我遇到过这个问题。
  • 我对 Cloudformation 也有同样的问题。我忘了正确设置变量替换。所以请注意缺少这样的“$”符号:Image: !Sub "${EcrUrl}/${EcrRepository}:{EcrTag}"

标签: amazon-web-services amazon-elastic-beanstalk amazon-ecs


【解决方案1】:

当我的一个变量末尾有一个额外的 } 时,我使用 terraform 得到了这个。

您可能会尝试在 docker 中构建镜像名称,然后将其回显以供审核。

将您的Dockerrun.aws.json 更新为:

...
"image": "%IMAGE_NAME",
...

然后将您的圈子构建更新为:

  - run:
      name: Deploy to Elastic Beanstalk
      command: |
        echo "Commit sha: ${CIRCLE_SHA1}"
        if [ "${CIRCLE_BRANCH}" == "docker" ]; then
          IMAGE_NAME=####.dkr.ecr.us-west-2.amazonaws.com/####:${CIRCLE_SHA1}
          echo "IMAGE_NAME is $IMAGE_NAME"
          sed -i'' -e "s/%IMAGE_NAME%/${IMAGE_NAME}/g" Dockerrun.aws.json
          eb deploy sales-web -l $CIRCLE_SHA1
        fi

如果失败,请在构建期间复制 IMAGE_NAME 输出并尝试使用自己拉取映像

$(aws ecr get-login --no-include-email --region us-west-2)
docker pull <IMAGE_NAME>

我打赌它会有一个你可以解决的错误。

【讨论】:

    【解决方案2】:

    我在尝试使用 Dockerrun.aws.json 进行部署时返回了类似的错误。对于我的情况,我在图像名称属性中有一个空格,如下所示。确保您的 Dockerrun.aws.json 文件定义正确

    {
        "AWSEBDockerrunVersion": 2,
        "volumes": [
          {
            "name": "demo-app",
            "host": {
              "sourcePath": "/var/app/current/demo-app"
            }
          }
        ],
        "containerDefinitions": [
          {
            "name": "demo-app",
            "image": " foo.dkr.ecr.me-south-1.amazonaws.com/foo:latest",
            "essential": true,
            "memory": 378,
            "links": ["redis"],
            "command": ["./entrypoint.sh"],
            "portMappings": [
              {
                "hostPort": 80,
                "containerPort": 5000
              }
            ],
      
            "mountPoints": [
              {
                "sourceVolume": "demo-app",
                "containerPath": "/src",
                "readOnly": true
              }
            ]
          },
        {
          "name": "redis",
          "image": "redis:latest",
          "essential": false,
          "memory": 128
      }
        ]
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多