标签: amazon-ecr

我可以直接在我的 Dockerfile 中使用 AWS ECR 映像吗?

在典型的 dockerfile 中,通常有这一行From ubuntu:16.04可以从 docker 存储库中提取图像。

现在我已经建立了自己的图像存储库:

在此处输入图片说明

存储库 URI 是: 1234567890.dkr.ecr.us-west-2.amazonaws.com/mycompany

如上图所示,我将图像推送到服务器。

我运行以下命令以确保我已登录到 ecr

> `aws ecr get-login --region us-west-2`
Flag --email has been deprecated, will be removed in 1.14.
Login Succeeded
Run Code Online (Sandbox Code Playgroud)

ECR 登录完成且没有错误。然后我尝试构建一个新图像:

> docker build -t rtf-converter . -f Dockerfile-rtf-converter 
Sending build context to Docker daemon 790.1 MB
Step 1/2 : FROM mycompany:latest
repository mycompany not found: does not exist or no pull access
Run Code Online (Sandbox Code Playgroud)

这是Dockerfile的内容

FROM mycompany:latest
RUN apt-get install chef-zero
Run Code Online (Sandbox Code Playgroud)

FROM语句中正确指定存储库的正确方法是什么?

我对标签特别困惑。什么是好的标签约定?

docker amazon-ecr

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

从 ECR 拉取 docker:dind 时,Docker 从 GitLab CI 登录 AWS ECR 失败,并显示“dial tcp: Lookup docker on xxxx:53: no such host”

我正在致力于将用于 GitLab CI/CD 构建和部署的 Docker 镜像集合从 Dockerhub 移植到 AWS 公共 ECR。除了我们用作 Docker-in-Docker 服务的标准 Docker 镜像之外,一切都按其应有的方式运行。从 Dockerhub 拉取时可以正常工作的相同镜像在从公共 ECR 拉取时无法登录。

.gitlab-ci.yml

    build-push:
      stage: package
      image: public.ecr.aws/x/x
      services:
      - public.ecr.aws/x/docker-dind:20.10
Run Code Online (Sandbox Code Playgroud)
$ aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_DOCKER_REGISTRY_URL
> Logging in to Docker registry...
> error during connect: Post http://docker:2375/v1.24/auth: dial tcp: lookup docker on 8.8.8.8:53: no such host
Run Code Online (Sandbox Code Playgroud)
$ cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services gitlab docker amazon-ecr

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

将 Amazon Elastic Container Registry 与 Jenkins 集成

我正在尝试将 Amazon 新的 Elastic Container Registry (ECR) 与我的 Jenkins 构建服务集成。我正在使用 Cloudbees Docker Build & Publish 插件来构建容器映像并将它们发布到注册表。

为了使用 ECR 而不是我的私有注册表,我运行了 AWS CLI 命令aws --region us-east-1 ecr get-login,该docker login命令会发出一个命令来运行 - 但我只是复制了密码并从该密码中创建了一个类型为“带密码的用户名”的 Jenkins 凭证(用户名是总是“AWS”)。

这很好用!问题是 AWS CLI 生成的 ECR 密码的有效期仅为 12 小时。所以现在,我必须每天手动重新生成两次密码并手动更新 Jenkins 凭据屏幕,否则我的构建开始失败。

有没有办法生成永久的 ECR 登录令牌,或者以某种方式自动生成令牌?

amazon-web-services jenkins docker amazon-ecr

10
推荐指数
2
解决办法
5746
查看次数

登录 ECR 的正确方法是什么?

目前,我的 bash 脚本中有此命令,用于构建图像并将其推送到 Amazon ECR

docker login -u AWS -p "$(aws ecr get-login-password)" "https://$(aws sts get-caller-identity --query 'Account' --output text).dkr.ecr.us-east-1.amazonaws.com"
Run Code Online (Sandbox Code Playgroud)

它会发出警告“警告!通过 CLI 使用 --password 是不安全的。请使用 --password-stdin。”

如何更改此命令以不发出警告?这真的是没有安全感吗?

aws-cli amazon-ecr

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

如何使用 python docker-py 连接到 AWS ECR

从命令行运行时,要从特定注册表中提取,我可以运行以下命令:

dockerCommand=$("aws ecr get-login --profile profileName --region us-west-2")
$dockerCommand  (which looks like docker login -u AWS -p ..longPassword.. -e none https://ACCTID.dkr.ecr.us-west-2.amazonaws.com
docker pull ACCTID.dkr.ecr.us-west-2.amazonaws.com/REPO/NAME:TAGNAME
Run Code Online (Sandbox Code Playgroud)

如果我想要一个不同的注册表,我会更改区域或配置文件名称

用 docker-py 试试这个,我有

import boto3
import docker
dockerClient = docker.from_env()

session = boto3.setup_default_session(profile_name='vzw')
client = session.client('ecr', region_name='us-west-2')

token = client.get_authorization_token(registryIds=[registryId])

username = 'AWS'
password = token['authorizationData'][0]['authorizationToken']
registry = token['authorizationData'][0]['proxyEndpoint']
regClient = dockerClient.login(username, password, registry)
Run Code Online (Sandbox Code Playgroud)

dockerClient拒绝与以下内容的联系:

错误的用户名或密码

从那里开始,一旦工作正常,我将想要使用 docker 客户端拉/推在注册表之间移动图像。

是正确的方向还是我应该尝试完全使用 shell 脚本来实现?(Python 对于描述每个注册表中的内容的 boto 调用特别有价值)

python docker amazon-ecr

9
推荐指数
4
解决办法
8619
查看次数

Amazon ECS 任务因 STOPPED 而失败(CannotPullContainerError:来自 daem 的错误响应)

我设置了一个AWS VPC,我试图在部署一个功能性的容器ECSFargate launch type,但任务总是失败:

STOPPED (CannotPullContainerError: Error response from daem)
Run Code Online (Sandbox Code Playgroud)

任务角色上下文:

ecsTaskExecutionRole
Run Code Online (Sandbox Code Playgroud)

其中具有以下 IAM 权限:

在此处输入图片说明

回购权限如下:

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "AllowPull",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole"
      },
      "Action": [
        "ecr:BatchCheckLayerAvailability",
        "ecr:BatchGetImage",
        "ecr:DescribeImages",
        "ecr:DescribeRepositories",
        "ecr:GetAuthorizationToken",
        "ecr:GetDownloadUrlForLayer",
        "ecr:GetRepositoryPolicy",
        "ecr:ListImages"
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

为了安全起见,实际的 id 被替换为 aws_account_id

我已按照本指南进行故障排除,其中指出:

由于以下问题之一,您可能会收到此错误:

  • 您的启动类型无权访问 Amazon ECR 终端节点

    我相信Fargate 可以访问 ECR

  • 您的 Amazon ECR 存储库策略限制对存储库映像的访问

    我相信它允许pull access使用的角色 - 请参阅上面的 repo 权限。

  • 您的 …

permissions amazon-vpc amazon-ecr aws-fargate

9
推荐指数
1
解决办法
5742
查看次数

如何估计AWS ECR中docker镜像使用的存储和流量?

我正在尝试估计使用 AWS ECR 的每月费用。它将包括:传出流量成本(下载图像)和存储成本(将图像存储在 ECR 中)。

让我们假设:

  • 我们正在使用 Mono 构建一些 Web 服务(基本 docker 镜像大小为 500Mb);
  • 我们的 CI&CD 服务器每月构建映像并将其推送到 ECR 300 次。为简单起见,未删除旧图像;
  • 我们编译的代码在基础镜像中添加了 40Mb 的附加层;
  • 我们每月从 AWS 下载图像 60 次;

第一个问题:如何估算每月的存储量?什么等式是正确的?

每月_Vol_1 = 500+40*300;- 基本图像仅存储一次

每月_Vol_2 = (500+40)*300; - 每个图像都包含基础图像

第二个问题是:如何估算AWS的每月流量?假设下载图像的主机不会删除现有数据。

每月流量_1 = (500+40)*60; -每次下载基础镜像和附加层时

每月流量_2 = 500+40*60;-仅下载第一个图像的基础图像。仅下载应用程序更新

Monthly_Traf_3 = 40*60; - 基础镜像不是从AWS ECR下载的,而是从docker hub下载的

更新:

我在 9 月份将 2 张图像上传到 AWS ECR,并在 2 个月后检查了账单信息。我发现了什么:

仅存储 2 张图像(不进行传输)每月花费我 0.04 美元。根据 AWS ECR 定价(每 1Gb …

traffic storage docker docker-registry amazon-ecr

7
推荐指数
0
解决办法
2349
查看次数

IAM用户创建ECR存储库的权限是什么?

我的 IAM 用户收到此错误

User: arn:aws:iam::123456789:user/admin is not authorized to perform: 
ecr:CreateRepository on resource: *
Run Code Online (Sandbox Code Playgroud)

当我尝试创建存储库时。

在此输入图像描述

我已经授予AmazonEC2ContainerServiceFullAccess该用户所属的组。我在“附加策略”中搜索存储库,但没有匹配项。如何授予该用户权限?

amazon-iam amazon-ecr

7
推荐指数
3
解决办法
2万
查看次数

AWS ECR - 推送成功,镜像未出现在仓库中

我们使用 AWS ECR 来托管我们的 docker 镜像。我们注意到在少数情况下 docker push 命令可以成功完成,但生成的图像没有出现在 ECR 容器存储库中。

还有其他人遇到这个问题吗?我们的 ECR 在us-east-1

我们的 docker push 脚本的输出:

WARNING: login credentials saved in /home/ubuntu/.docker/config.json
Login Succeeded
The push refers to a repository [<our-id>.dkr.ecr.us-east-1.amazonaws.com/<our-repo>] (len: 2)
...
develop: digest: sha256:<redacted-sha> size: 36365
develop.<redacted-tag>: digest: sha256:<redacted-sha> size: 36370
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-ecr

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

为不同的 Docker 注册表配置“auth”和“credsStore”

我正在尝试为两个不同的注册表配置 Docker。(一个 ECR 和 docker.io)我需要ecr-login使用 simple 配置 ECR 1 和 docker.io auth,但我无法同时配置这些。它给出以下错误:

保存凭据时出错:存储凭据时出错 - 错误:退出状态 1,输出:not implemented

这是我的 ~/.docker/config.json

{
    "auths": {
            "https://index.docker.io/v1/": {
                    "auth": "BASE64-STRING"
            }
    },
    "credsStore": "ecr-login"
}
Run Code Online (Sandbox Code Playgroud)

为什么 Docker 在已经可用的credsStore情况下还要尝试使用它?auth

docker docker-registry amazon-ecr

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

Elastic Container Service (ECS) 或 Elastic Container Registry (ECR)、Elastic Beanstalk 和 Lambda 之间如何选择?

背景: 我使用过 EC2 和 RDS。最近,我收到一位客户的询问,他想使用 Amazon Web Services 开发移动和 Web 应用程序,并且需要关于他应该使用哪种服务的建议?

  • 弹性豆茎
  • 拉姆达
  • 弹性容器服务 (ECS) 或弹性容器注册表 (ECR)

此外,我已经通过 YouTube 和 Google 上的几个教程来了解这些服务,但我仍然无法弄清楚他应该使用哪种服务。

问题: 我对上述服务没有任何适当的知识和经验。因此,我希望得到与他们合作过的人的建议。

请说明使用特定服务的优缺点,以便我更容易提供建议。

amazon-web-services elastic-beanstalk amazon-ecs amazon-ecr amazon-lambda

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

授予一名用户对 ECR 存储库的只读访问权限

我怎样才能授予a_user只读访问权限(即没有推送权限)并且b_user不被禁止?

到目前为止我做了什么:

  • 添加了我的 AWS 访问 + 密钥 aws configure

  • 制作了一个 ECR repo 并aws ecr get-login ...执行了让我登录的命令

  • 添加了一个权限:

    Deny, 校长: my_principal_id, IAM: a_user,Push

  • 尝试了 docker Push,尽管它明确拒绝了我b_user(仅允许禁止a_user?)

amazon-web-services amazon-ecr

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