Как исправить ошибку no basi c auth credentials with hdockerpy и aws ecr repo? - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь выполнить следующий код python:

import logging
import sys
import docker, boto3
from base64 import b64decode

logging.basicConfig(stream=sys.stdout, level=logging.INFO)

LOCAL_REPOSITORY = '111111111111.dkr.ecr.us-east-1.amazonaws.com/my_repo:latest'

image = '111111111111.dkr.ecr.us-east-1.amazonaws.com/my_repo'
ecr_registry, _ = image.split('/', 1)
client = docker.from_env()

# Get login credentials from AWS for the ECR registry.
ecr = boto3.client('ecr')
response = ecr.get_authorization_token()
token = b64decode(response['authorizationData'][0]['authorizationToken'])
username, password = token.decode('utf-8').split(':', 1)

# Log in to the ECR registry with Docker.
client.login(username, password, registry=ecr_registry)
logging.info("loggined")
client.images.pull(image,   auth_config={
  username: username,
  password: password
})

И получил исключение:

C:\myPath>python app/pull_example.py
INFO:botocore.credentials:Found credentials in environment variables.
INFO:root:loggined
Traceback (most recent call last):
  File "C:\Python3\lib\site-packages\docker\api\client.py", line 261, in _raise_for_status
    response.raise_for_status()
  File "C:\Python3\lib\site-packages\requests\models.py", line 940, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: http+docker://localnpipe/v1.35/images/create?fromImage=111111111111.dkr.ecr.us-east-1.amazonaws.com%2Fmy_repo

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "app/pull_example.py", line 41, in <module>
    password: password
  File "C:\Python3\lib\site-packages\docker\models\images.py", line 445, in pull
    repository, tag=tag, stream=True, **kwargs
  File "C:\Python3\lib\site-packages\docker\api\image.py", line 415, in pull
    self._raise_for_status(response)
  File "C:\Python3\lib\site-packages\docker\api\client.py", line 263, in _raise_for_status
    raise create_api_error_from_http_exception(e)
  File "C:\Python3\lib\site-packages\docker\errors.py", line 31, in create_api_error_from_http_exception
    raise cls(e, response=response, explanation=explanation)
docker.errors.APIError: 500 Server Error: Internal Server Error ("Get https://111111111111.dkr.ecr.us-east-1.amazonaws.com/v2/my_repo/tags/list: no basic auth credentials")

В чем проблема? Почему я не могу вытащить изображение даже после client.login звонка, который происходит без каких-либо исключений. Как правильно выполнить вход и получить образ из репозитория ECR и dockerpy?

1 Ответ

0 голосов
/ 07 февраля 2020

Это произошло из-за - https://github.com/docker/docker-py/issues/2157

Удаление ~/.docker/config.json решило проблему.

...