在典型的 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语句中正确指定存储库的正确方法是什么?
我对标签特别困惑。什么是好的标签约定?
我正在致力于将用于 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 新的 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 登录令牌,或者以某种方式自动生成令牌?
目前,我的 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。”
如何更改此命令以不发出警告?这真的是没有安全感吗?
从命令行运行时,要从特定注册表中提取,我可以运行以下命令:
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 调用特别有价值)
我设置了一个AWS VPC,我试图在部署一个功能性的容器ECS上Fargate 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 终端节点
您的 Amazon ECR 存储库策略限制对存储库映像的访问
我相信它允许pull access使用的角色 - 请参阅上面的 repo 权限。
您的 …
我正在尝试估计使用 AWS ECR 的每月费用。它将包括:传出流量成本(下载图像)和存储成本(将图像存储在 ECR 中)。
让我们假设:
第一个问题:如何估算每月的存储量?什么等式是正确的?
每月_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 …
我的 IAM 用户收到此错误
User: arn:aws:iam::123456789:user/admin is not authorized to perform:
ecr:CreateRepository on resource: *
Run Code Online (Sandbox Code Playgroud)
当我尝试创建存储库时。
我已经授予AmazonEC2ContainerServiceFullAccess该用户所属的组。我在“附加策略”中搜索存储库,但没有匹配项。如何授予该用户权限?
我们使用 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) 我正在尝试为两个不同的注册表配置 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
背景: 我使用过 EC2 和 RDS。最近,我收到一位客户的询问,他想使用 Amazon Web Services 开发移动和 Web 应用程序,并且需要关于他应该使用哪种服务的建议?
此外,我已经通过 YouTube 和 Google 上的几个教程来了解这些服务,但我仍然无法弄清楚他应该使用哪种服务。
问题: 我对上述服务没有任何适当的知识和经验。因此,我希望得到与他们合作过的人的建议。
请说明使用特定服务的优缺点,以便我更容易提供建议。
amazon-web-services elastic-beanstalk amazon-ecs amazon-ecr amazon-lambda
我怎样才能授予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-ecr ×12
docker ×6
amazon-ecs ×1
amazon-iam ×1
amazon-vpc ×1
aws-cli ×1
aws-fargate ×1
gitlab ×1
jenkins ×1
permissions ×1
python ×1
storage ×1
traffic ×1