通过 docker-py 从 ECR 拉取镜像
Pulling image from ECR via docker-py
我有一个脚本可以检索 ECR 的登录名,使用登录凭据验证 DockerClient 实例(reauth 设置为 True),然后尝试拉取指定的容器映像。
当我的本地计算机上的 运行 与 EC2 实例上的 docker 守护程序交互时,代码似乎可以完美运行,但是当来自 EC2 实例的 运行 时,我不断得到
404 Client Error: Not Found ("repository XXXXXXXX.dkr.ecr.eu-west-2.amazonaws.com/autohld-runner not found: does not exist or no pull access")
同一存储库用于在 EC2 实例上本地和远程执行代码。我已经尝试在 ECR 中设置对图像的访问权限,以允许对每个人和我的 AWS ID 进行拉取。我还授予了分配给 EC2 实例的角色完全管理员访问权限。皆无欢喜。
如果我使用完全相同的 repo URI(从错误中复制)通过命令行在 EC2 实例上执行相同的任务,它可以正常工作。
我在 docker-py 中遗漏了什么吗?
url = "tcp://127.0.0.1:2375"
dockerd = docker.DockerClient(base_url=url, version='auto')
dockerd.login(username=ecr.username, password=ecr.password, email='none', registry=ecr.registry, reauth=True)
dockerd.images.pull(ecr.get_repo(instance.tags['Container']), tag='latest')
get_repo
returns 错误消息中报告的完整 URI,Container 元素是名称 'autohld-runner'
谢谢
似乎如果已通过 cli 访问注册表,则会设置身份验证令牌或其他内容,并且 docker 记住这允许后续调用工作。然而,在这种情况下,实例是完全全新启动的,并使用 docker-py.
中的登录方法
这似乎没有将凭据传递给 pull,我发现使用 auth_config
命名参数并传入 auth 参数字典是可行的。
auth_creds = {'username': ecr.username, 'password': ecr.password}
dockerd.images.pull(ecr.get_repo(instance.tags['Container']), tag='latest', auth_config=auth_creds)
HTH
我有一个脚本可以检索 ECR 的登录名,使用登录凭据验证 DockerClient 实例(reauth 设置为 True),然后尝试拉取指定的容器映像。
当我的本地计算机上的 运行 与 EC2 实例上的 docker 守护程序交互时,代码似乎可以完美运行,但是当来自 EC2 实例的 运行 时,我不断得到
404 Client Error: Not Found ("repository XXXXXXXX.dkr.ecr.eu-west-2.amazonaws.com/autohld-runner not found: does not exist or no pull access")
同一存储库用于在 EC2 实例上本地和远程执行代码。我已经尝试在 ECR 中设置对图像的访问权限,以允许对每个人和我的 AWS ID 进行拉取。我还授予了分配给 EC2 实例的角色完全管理员访问权限。皆无欢喜。
如果我使用完全相同的 repo URI(从错误中复制)通过命令行在 EC2 实例上执行相同的任务,它可以正常工作。
我在 docker-py 中遗漏了什么吗?
url = "tcp://127.0.0.1:2375"
dockerd = docker.DockerClient(base_url=url, version='auto')
dockerd.login(username=ecr.username, password=ecr.password, email='none', registry=ecr.registry, reauth=True)
dockerd.images.pull(ecr.get_repo(instance.tags['Container']), tag='latest')
get_repo
returns 错误消息中报告的完整 URI,Container 元素是名称 'autohld-runner'
谢谢
似乎如果已通过 cli 访问注册表,则会设置身份验证令牌或其他内容,并且 docker 记住这允许后续调用工作。然而,在这种情况下,实例是完全全新启动的,并使用 docker-py.
中的登录方法这似乎没有将凭据传递给 pull,我发现使用 auth_config
命名参数并传入 auth 参数字典是可行的。
auth_creds = {'username': ecr.username, 'password': ecr.password}
dockerd.images.pull(ecr.get_repo(instance.tags['Container']), tag='latest', auth_config=auth_creds)
HTH