使用远程 API 从 AWS ECR 拉取 docker 图像
Pull docker image from AWS ECR using remote API
我已按照 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."
尽管我只是 "requested" 令牌。
如果我这样做:
#!/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 ()}')
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 支持基本身份验证。当 pushing/pulling 通过 HTTP 在注册表上时,docker 客户端将不会发送基本身份验证 headers。这是设计使然,以防止人们通过不安全的渠道发送他们的凭据。使用 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
我已按照 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."
尽管我只是 "requested" 令牌。
如果我这样做:
#!/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 ()}')
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 支持基本身份验证。当 pushing/pulling 通过 HTTP 在注册表上时,docker 客户端将不会发送基本身份验证 headers。这是设计使然,以防止人们通过不安全的渠道发送他们的凭据。使用 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