无法从 Docker Build 中的 ECR 中提取

Jon*_*man 5 docker dockerfile aws-codebuild docker-in-docker aws-ecr

当我尝试使用 AWS CodeBuild 从 ECR 中提取映像作为 Docker Build 的一部分时遇到凭据问题。

对于上下文,我们的设置是这样的

Codebuild 正在调用我们编写的内部 docker 工具。这个工具然后正在做 docker 构建。可以使这更容易理解的示例命令:

../codebuild-templates/ourtoolscript docker -v
Run Code Online (Sandbox Code Playgroud)

“ourtoolscript”只是一个设置一堆环境变量的bash脚本,最后用我们指定的命令调用docker run。

问题
我们正在尝试在此工具中进行 docker 构建。它可以在本地工作,也可以与其他不从 ECR 拉取映像进行构建的存储库一起使用。
我们正在这样做,因此所有标记逻辑和所有内容都是工具中的一个脚本,我们可以将其应用于每个存储库。所以说只在工具之外做一个 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
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情

我所知道的

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