shell - 使用远程 API 从 AWS ECR 提取 docker 镜像

标签 shell amazon-web-services docker docker-registry amazon-ecs

我已关注this post尝试从 AWS ECR 下载 Docker 镜像,但出现以下错误:

如果我这样做:

#!/bin/sh

repository="2xxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/nexus-pro"
tag="2.13.0-np-1.0"

ecr_token=$(aws ecr get-authorization-token --output text --query authorizationData[].authorizationToken | cut -d: -f2)

docker_login=$(echo "{\"username\":\"AWS\",\"password\":\"${ecr_token}\", \"auth\":\"\",\"email\":\"none\"}" | base64)

curl -X POST -d "" -H "X-Registry-Auth: ${docker_login}" http://${ip_address}:4243/images/create?fromImage=${repository}&tag=${tag_source}

然后我收到以下错误:

$ error parsing HTTP 403 response body: invalid character 'Y' looking for beginning of value: "Your Authorization Token has expired. Please run 'aws ecr get-login' to fetch a new one."

即使我只是“请求” token 。

如果我这样做:

#!/bin/sh

repository="2xxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/nexus-pro"
tag="2.13.0-np-1.0"

ecr_token=$(aws ecr get-login | awk '{print ($6)}')

docker_login=$(echo "{\"username\":\"AWS\",\"password\":\"${ecr_token}\", \"auth\":\"\",\"email\":\"none\"}" | base64)

curl -X POST -d "" -H "X-Registry-Auth: ${docker_login}" http://${ip_address}:4243/images/create?fromImage=${repository}&tag=${tag_source}

我收到以下错误:

$ error parsing HTTP 404 response body: invalid character 'p' after top-level value: "404 page not found\n"

该镜像位于 ECR 上,如果我执行 docker login ...,然后 docker pull 2xxxxxxxxxx.dkr.ecr.us-east-1.amazonaws,我就可以拉取它。 com/nexus-pro:2.13.0-np-1.0

我不确定我在这里做错了什么。非常感谢任何帮助!

最佳答案

仅通过 HTTPS 支持基本身份验证。通过 HTTP 推送/拉取注册表时,docker 客户端不会发送基本身份验证 header 。这样做的目的是防止人们通过不安全的 channel 发送凭据。使用 SSL 应该可以解决这个问题。

尝试使用以下内容:

https://${ip_address}:4243/images/create?fromImage=${repository}&tag=${tag_source}

或者为您从中提取镜像的实例启用 SSL 证书。这可能对你有帮助。 http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/SSL-on-an-instance.html

关于shell - 使用远程 API 从 AWS ECR 提取 docker 镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38268941/

相关文章:

windows - 如何在 Windows 上编写脚本/批处理文件?

java - 如何创建仅在 6 天后过期的 s3 下载链接

amazon-web-services - 如何使用 cdktf 在运行时获取所有可用区?

java - HTTP 500 内部服务器错误 : while containerizing my java web app

java - 使用 docker-java 客户端库获取所有容器/图像

shell - 使用cron作业和Shell脚本发送邮件

linux - 如何在 Shell 脚本中生成每个主机的 UUID?

linux - 在Linux中连续监视日志,并在发现错误时发送电子邮件?

amazon-web-services - 每个EC2实例扩展AWS弹性beantalk中的Docker容器数量[应用程序架构]

python - 我如何为我的员工组织健康检查(带有 python 代码的 Docker)?