当我尝试使用 AWS CodeBuild 从 ECR 提取图像作为 Docker 构建的一部分时遇到了凭证问题。
对于上下文,我们的设置是这样的:
Codebuild 正在调用我们编写的内部 docker 工具。然后,此工具正在执行 docker 构建。可以使这更容易理解的示例命令:
../codebuild-templates/ourtoolscript docker -v
“ourtoolscript”只是一个设置一堆环境变量的bash脚本,最后用我们指定的命令调用docker run。
问题
我们正在尝试在此工具中进行 docker 构建。它可以在本地工作,它也可以与其他不从 ECR 提取图像进行构建的 repo 一起使用。
我们这样做是为了标记的所有逻辑和一切都是工具中的脚本,我们可以将其应用于每个 repo。所以说只在工具之外进行 docker build 是不可接受的解决方案。
如果 docker 文件从 ECR 中提取“FROM”,它将失败并显示:
time="2019-03-12T14:48:25Z" level=error msg="Error listing credentials" error="ecr: Failed to get authorization token: MissingRegion: could not find region configuration"
Get https://URLTOECRWITHTAG: no basic auth credentials
我尝试过的事情:
- 执行https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html#troubleshooting-versions中的步骤
- 首先从我们的工具中执行 docker pull,这很有效。但这不是我们可以继续做的事情
- 在工具之外执行 docker 构建,这很有效。
我所知道的:
- CodeBuild 提供的凭据可以很好地进入我们的工具。因为它可以毫无问题地推拉
- 如果不是从 ECR 图像构建,我可以构建得很好
- docker build 的 pull 与普通的“docker pull”的工作方式有所不同
- 如果我只是做一个简单的“docker build”。在工具之外没有构建参数。它可以很好地提取图像。所以我认为我在这些变量上走错了路。
其他信息:
我的 docker build 命令(删除了一些额外的东西):
docker build --build-arg AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION --build-arg AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI --rm --build-arg REPO='xyz.dkr.ecr.xyz.amazonaws.com' -f Dockerfile .
Sending build context to Docker daemon 16.64MB