Python >> Tutoriel Python >  >> Python

Comment se connecter à AWS ECR à l'aide de python docker-py

Solution 1 :

Exemple de code complet qui fonctionne :

#!/usr/bin/env python3
import base64, docker, boto3

docker_client = docker.from_env(version='1.24')
ecr_client = boto3.client('ecr', region_name='eu-west-1')

token = ecr_client.get_authorization_token()
username, password = base64.b64decode(token['authorizationData'][0]['authorizationToken']).decode().split(':')
registry = token['authorizationData'][0]['proxyEndpoint']

docker_client.login(username, password, registry=registry)

Et bien sûr, vous devez d'abord configurer vos informations d'identification AWS, par exemple :

export AWS_ACCESS_KEY_ID=youraccesskey
export AWS_SECRET_ACCESS_KEY=yoursecretaccesskey

Solution 2 :

J'ai rencontré le même problème, vous devez :

  1. décoder à partir de base64

  2. convertir d'octet en chaîne

  3. séparer le login 'AWS'

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

Solution 3 :

Échec de la connexion

dockerClient refuse la connexion avec "mauvais nom d'utilisateur ou mot de passe"

La signature de la fonction que vous appelez pour vous connecter est :

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

Notez la position du registry paramètre. Il est quatrième dans la liste. Donc votre appel de :

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

Passe votre registry comme le email depuis email est le troisième paramètre. Je vous suggère de passer à quelque chose comme :

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

Python ou shell ?

Est-ce la bonne direction ou devrais-je essayer de l'implémenter entièrement avec des scripts shell? (Python a été particulièrement utile pour les appels boto pour décrire ce qui se trouve dans chaque registre)

Optez pour le Python.