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

从命令行运行时,从特定的registry中运行,我可以运行这些命令:

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 

如果我想要一个不同的registry,我更改区域或profileName

用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) 

但是dockerClient拒绝连接:

错误的用户名或密码

从那里,一旦工作,我会想要使用docker客户端拉/推在registry之间移动图像。

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

login失败

dockerClient拒绝与“错误的用户名或密码”的连接

您要调用的函数的签名是:

 def login(self, username, password=None, email=None, registry=None, reauth=False, insecure_registry=False, dockercfg_path=None): 

请注意registry参数的位置。 这是名单上的第四位。 所以你的电话:

 regClient = dockerClient.login(username, password, registry) 

因为email是第三个参数,所以将registry作为email传递 build议你改变一下:

 regClient = dockerClient.login(username, password, registry=registry) 

Python还是shell?

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

去与Python。

我面临同样的问题,你必须:

  1. 从base64解码
  2. 从字节转换为string
  3. 分开login“AWS”

     password = (base64.b64decode(response['authorizationData'[0]authorizationToken'])).decode("utf-8").split(":")[-1]