Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 通过docker py从ECR提取图像_Python 3.x_Amazon Web Services_Amazon Ec2_Dockerpy_Aws Ecr - Fatal编程技术网

Python 3.x 通过docker py从ECR提取图像

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实例上本地和远程执行

我有一个脚本,用于检索ECR的登录名,使用登录凭据(reauth设置为True)对DockerClient实例进行身份验证,然后尝试提取指定的容器映像

当在本地机器上运行并与EC2实例上的docker守护进程交互时,代码似乎工作得很好,但是当从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)