从命令行运行时,从特定的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中的内容特别有价值)
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)
是正确的方向,还是应该试图完全用shell脚本来实现? (Python对于boto调用来描述每个registry中的内容特别有价值)
去与Python。
我面临同样的问题,你必须:
分开login“AWS”
password = (base64.b64decode(response['authorizationData'[0]authorizationToken'])).decode("utf-8").split(":")[-1]