标签: aws-ecr

使用 amazon-ecr-credential-helper 时“无基本身份验证凭据”

我正在尝试设置amazon-ecr-credential-helper,no basic auth credentials在我尝试时总是得到docker pull

当我使用aws ecr get-logindocker login ...那我也没问题。

我按照他们的 README 文件中的说明使用 docker 映像创建了二进制文件。

在故障排除部分,他们说应该存储一个日志文件,~/.ecr/log但该/.ecr文件夹不存在。

规格:Docker 版本 18.06.1-ce,构建 e68fc7a

aws-cli/1.16.31 Python/2.7.15 Darwin/17.4.0 botocore/1.12.21

MacOS 高山脉

我希望有人有一个想法来弄清楚出了什么问题。

docker aws-ecr

5
推荐指数
1
解决办法
960
查看次数

docker 通过python docker SDK 登录ECR

python3 以及https://docker-py.readthedocs.io/en/stable/

我只是好奇,当我登录到 ecr(通过 aws ecr get-login)时,我 PC 上的 docker deamon 会记住令牌,即使重新启动 shell,我也可以登录到 ECR,直到令牌过期。我什至可以在 auths 密钥的 ~/.docker/config.json 文件中看到

令人惊讶的是,通过 python docker SDK 登录:

ecr_client = boto3.client('ecr')
    token = ecr_client.get_authorization_token()
    username, password = base64.b64decode(token['authorizationData'][0]['authorizationToken']).decode().split(':')
    registry = token['authorizationData'][0]['proxyEndpoint']

    docker_client.login(
        username=username,
        password=password,
        registry=registry
    )

    client.pull(...)
Run Code Online (Sandbox Code Playgroud)

让我的 docker 守护进程对登录尝试一无所知。当我尝试通过命令行提取相同的图像时 - 我收到错误“无身份验证凭据”。更奇怪的是,当我通过命令行登录 ECR 时,我不再需要通过 python 脚本进行身份验证。

知道为什么会这样吗?

python docker aws-ecr

5
推荐指数
1
解决办法
1169
查看次数

从“aws ecr get-login”获取结果的问题

给出以下命令时出现以下错误。

aws ecr get-login --region eu-central-1
Run Code Online (Sandbox Code Playgroud)

错误

An error occurred (AccessDeniedException) when calling the GetAuthorizationToken operation: User: arn:aws:iam::314xxxx91079:user/git is not authorized to perform: ecr:GetAuthorizationToken on resource: *
Run Code Online (Sandbox Code Playgroud)

我的管理员已授予我访问此“GetAuthorizationToken”资源的权限。

很可能我认为问题是用于此命令的 'arn:aws:iam::314xxxx91079:user/git' 用户。当我登录到 aws 控制台时,我看到我的用户名 (IAM) 如下。

amit@iproxxx.com
Run Code Online (Sandbox Code Playgroud)

我如何让 'get-login' 使用这个用户名而不是 user/git。我对 aws cli 很陌生,这个命令恰好是构建步骤之一。

amazon-web-services aws-cli aws-lambda aws-ecr

5
推荐指数
3
解决办法
9820
查看次数

无法从 Docker Build 中的 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 …

docker dockerfile aws-codebuild docker-in-docker aws-ecr

5
推荐指数
0
解决办法
1347
查看次数

在 Jenkinsfile 中对 ECR 进行身份验证,以便我可以提取图像来运行构建?

这里的情况是我们有一个应用程序,该应用程序当前正在 Jenkins slave 上构建,并在其上安装了特定版本的节点。我们想要标准化构建环境,因此想要在 docker 容器中构建。

通过我的研究,这绝对是可能的。然而,我们面临的挑战是我们想要使用我们自己管理并存储在 ECR 中的自定义图像。我们不想使用 docker hub 上的那些。考虑到这一限制,我正在努力在我的 Jenkinsfile 中对我们的 ECR 进行身份验证。理想情况下,我可以做这样的事情:

pipeline {
    agent {
        docker {
            image 'node:7'
            registryUrl 'ecr_url.amazonaws.com'
            registryCredentialsId 'ecr:us-east-1:iam_role'
        }
    }
    stages {
        stage('Build') {
            steps {
                sh 'command goes here'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但这里的问题是,我们的 ECR 登录依赖于在 Jenkins 工作器(安装了 aws cli)上运行 shell 命令来登录并访问图像。到目前为止,我还没有在 Jenkinsfile 中进行身份验证,所以我可以提取一个图像来运行构建。有谁知道这是否可能,如果是,如何编辑 Jenkinsfile 来做到这一点?

amazon-web-services jenkins docker jenkins-pipeline aws-ecr

5
推荐指数
1
解决办法
7205
查看次数

无法PullContainerError:启动ECS任务时上下文取消错误

我正在使用 Fargate 启动 ECS 任务,容器在处于 PENDING 状态几分钟后最终处于 STOPPED 状态。状态提供以下错误消息:

CannotPullContainerError: context canceled
Run Code Online (Sandbox Code Playgroud)

我正在使用 PrivateLink 来允许 ECS 主机与 ECR 注册表对话,而无需通过公共互联网,这就是它的配置方式(无服务器语法增强 CloudFormation):

      Properties:
        PrivateDnsEnabled: true
        ServiceName: com.amazonaws.ap-southeast-2.ecr.dkr
        SubnetIds:
          - { Ref: frontendSubnet1 }
          - { Ref: frontendSubnet2 }
        VpcEndpointType: Interface
        VpcId: { Ref: frontendVpc }
Run Code Online (Sandbox Code Playgroud)

关于导致错误的原因有什么想法吗?

amazon-web-services aws-ecr

5
推荐指数
1
解决办法
3432
查看次数

如何在 GitLab CI 中的任何其他内容之前在我的 PATH 中设置 docker-credential-ecr-login

我正在使用 AWS ECR 来托管私有 Dockerfile 映像,我想在 GitLab CI 中使用它。

根据文档,我需要设置 docker-credential-ecr-login 以获取私有图像,但我不知道如何在其他任何事情之前做到这一点。那是我的 .gitlab-ci 文件:

image: 0222822883.dkr.ecr.us-east-1.amazonaws.com/api-build:latest

tests:
  stage: test
  before_script:
    - echo "before_script"
    - apt install amazon-ecr-credential-helper
    - apk add --no-cache curl jq python py-pip
    - pip install awscli
  script:
    - echo "script"
    - bundle install
    - bundle exec rspec
  allow_failure: true # for now as we do not have tests
Run Code Online (Sandbox Code Playgroud)

谢谢你。

gitlab docker aws-ecr

5
推荐指数
1
解决办法
4234
查看次数

AWS ECS Fargate从跨账户ECR存储库提取图像

我有2个AWS账户:-具有ECR回购的账户A。-具有运行Fargate的ECS群集的帐户b。

我在具有对账户B的信任关系的账户A中创建了“跨账户”角色,并且我已经将“ AmazonEC2ContainerRegistryPowerUser”策略附加到了该角色。

通过在存储库策略中添加帐户B的ID和“跨帐户”角色,可以访问帐户A中的ECR存储库。

我将策略附加到Fargate的“ TaskExecutionRole”上,使Fargate可以承担“跨帐户”角色。

当尝试通过引用帐户A中的图像在帐户B中部署Fargate任务时,出现500错误。

amazon-web-services amazon-ecs aws-ecr

4
推荐指数
1
解决办法
1694
查看次数

从 Jenkins 管道推送到 ECR

我有预置的 Jenkins 服务器。我有创建 Docker 镜像的 Jenkins 文件,现在我想将该镜像推送到 AWS ECR。我是否必须创建一个特殊的 IAM 用户并提供其访问和秘密访问密钥?或者什么是最好的方法来做到这一点。

我在互联网上找到了下面

  withAWS(role:'Jenkins', roleAccount:'XXXX216610',duration: 900, roleSessionName: 'jenkinssession')
  sh ' eval \$(aws ecr get-login --no-include-email --region us-east-2) '
Run Code Online (Sandbox Code Playgroud)

但是由于我的 jenkins 服务器是本地部署,角色将如何工作?

amazon-web-services jenkins docker aws-ecr

4
推荐指数
2
解决办法
1万
查看次数

CodePipeline:如何将 ECR 与 Elastic Beanstalk 集成?

我正在尝试将 ECR 和 Elastic Beanstalk 与以下 CodePipeline 设置结合起来:

  1. 来源:CodeCommit
  2. Build :buildspec.yml它构建一个 docker 镜像并将其推送到 ECR 存储库
  3. 部署:Elastic Beanstalk

请注意,第 2 步不包含任何工件,它仅通过使用从源代码构建新映像docker build -t <my-image> .并将其推送到带有最新标记的 ECR。

我的问题是:

  1. 如何从第 3 步触发 beanstalk 以使用最新的 ECR 映像?
    1. 步骤 1/2 中应包含哪些工件(如果有)?
    2. Dockerrun.aws.json每次都指向ECR图像文件的工件是否相同?
  2. 替代方法:我是否应该将整个源代码部署到 beanstalk 并让它使用包中的 Dockerfile 来构建它?
    1. 如果是这样 - 我在哪里可以看到图像的构建过程?
    2. 有没有办法从源代码中选择不同的 Dockerfile?

amazon-web-services amazon-elastic-beanstalk aws-codepipeline aws-ecr

3
推荐指数
1
解决办法
785
查看次数