Python 3.x 通过docker py从ECR提取图像
我有一个脚本,用于检索ECR的登录名,使用登录凭据(reauth设置为True)对DockerClient实例进行身份验证,然后尝试提取指定的容器映像 当在本地机器上运行并与EC2实例上的docker守护进程交互时,代码似乎工作得很好,但是当从EC2实例运行时,我经常会收到Python 3.x 通过docker py从ECR提取图像,python-3.x,amazon-web-services,amazon-ec2,dockerpy,aws-ecr,Python 3.x,Amazon Web Services,Amazon Ec2,Dockerpy,Aws Ecr,我有一个脚本,用于检索ECR的登录名,使用登录凭据(reauth设置为True)对DockerClient实例进行身份验证,然后尝试提取指定的容器映像 当在本地机器上运行并与EC2实例上的docker守护进程交互时,代码似乎工作得很好,但是当从EC2实例运行时,我经常会收到 404客户端错误:未找到(“存储库xxxxxxx.dkr.ecr.eu-west-2.amazonaws.com/autohld-runner未找到:不存在或没有拉取访问”) 相同的repo被用于在EC2实例上本地和远程执行
404客户端错误:未找到(“存储库xxxxxxx.dkr.ecr.eu-west-2.amazonaws.com/autohld-runner未找到:不存在或没有拉取访问”)
相同的repo被用于在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\u repo
返回错误消息中报告的完整URI,容器元素的名称为“autohld runner”
谢谢如果注册表已通过cli访问,则会设置一个身份验证令牌或其他内容,docker会记住这一点,从而允许后续调用工作。但是,在这种情况下,实例将以全新的方式启动,并使用docker py中的登录方法 这似乎没有将凭证传递给pull,我发现使用
auth\u 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)
嗯