AWS ECS 异常 Container.image contains invalid char 是什么意思?

Kār*_*els 6 amazon-web-services amazon-ecs amazon-elastic-beanstalk

我们在工作流程中使用 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
Run Code Online (Sandbox Code Playgroud)

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

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

登录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.
Run Code Online (Sandbox Code Playgroud)

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

已经尝试和谷歌搜索了两天,但没有运气。将不胜感激任何帮助或指导来理解此错误消息的含义。如果需要任何其他详细信息,我会提供,尽管询问。

Car*_*l G 3

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

您可能会尝试做的是在 docker 中构造镜像名称,并回显它以进行审核。

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

...
"image": "%IMAGE_NAME",
...
Run Code Online (Sandbox Code Playgroud)

然后更新你的圈子构建如下:

  - 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
Run Code Online (Sandbox Code Playgroud)

然后,如果失败,请在构建期间复制 IMAGE_NAME 输出,并尝试使用以下命令自行拉取映像

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

我敢打赌它会出现一个错误,您可以对其进行故障排除。